Аргерих Л. О языке РНР. Часть 1. Страница 94


Сувеличением размера систем становится необходимостью размещение клас­сов, имеющихся в веб-приложении, в древовидной структуре каталогов. Для добавления нужных классов в файлы исходного кода применяются методы include_once() или require_once().

<?php //Car.php

class Car {

В крайне упрощенной модели класса са г есть двигатель (engine) и ключ, что­бы завести его. В настоящем автомобиле будут кузов, двери, педали газа и тормоза, руль, передача и многое другое, но для демонстрации ограничимся сказанным:

var $engine; var $requiredKey:

У класса car есть также конструктор, устанавливающий двигатель и ключ для запуска. Если не инициализировать эти элементы автомобиля, то впо­следствии вызовы start() и stop() будут неудачны и возвратят ошибки. Как отмечалось выше, задача конструктора - инициализировать все элементы объекта, чтобы при необходимости можно было воспользоваться любым его сервисом.

Отметим, что для обращения к члену класса необходимо поместить перед именем члена ключевое слово $this->. Этим РНР отличается от Java и C++, где оно не обязательно. Дело в том, что РНР не очень силен в работе с облас­тями видимости переменных. В РНР есть три уровня пространств имен, в которых хранятся переменные (пространство имен, в сущности, представля­ет собой собрание имен переменных).

Пространство имен самого нижнего уровня отводится для локальных пере­менных внутри функций или методов. Любая переменная, создаваемая на этом уровне, добавляется в локальное пространство имен. В следующем про­странстве имен хранятся все члены объекта. Высший уровень пространств имен отводится для глобальных переменных. Ключевое слово Sthis сообща­ет РНР, что вам нужна переменная из пространства имен объекта (средний уровень). Если забыть слово Sthis, то будет создана совершенно новая пере­менная в локальном пространстве имен. Возникновение ссылки на перемен­ную, отличную от той, которая нужна, приводит к появлению трудно обна- ружимой логической ошибки.

При разработке класса не забудьте включить вывод сообщений об ошибках, о чем рассказывается в следующей главе, и добавьте какие-нибудь проверки, чтобы защититься от этой распространенной ошибки.

Метод start() заводит машину, если у пользователя есть ключ. Если ключ подходит, объект са г дает двигателю команду заводиться:

// Конструктор

function Car()

<

$this->requiredKey = new DefaultKeyO;

$this->engine = new EngineQ;

}

function start($key)

{

if ($key->equals($this->requiredKey)) { $this->engine->start(); return true;




Если вы устали от городского шума, пыли и суеты, покупайте себе домик в коттеджном поселке Глаголево, который находится в экологически чистом районе. На нашем сайте вы сможете узнать более детальную информацию и посмотреть фотографии.