Сувеличением размера систем становится необходимостью размещение классов, имеющихся в веб-приложении, в древовидной структуре каталогов. Для добавления нужных классов в файлы исходного кода применяются методы 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;