Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
otvety_shilina.doc
Скачиваний:
6
Добавлен:
19.09.2019
Размер:
275.46 Кб
Скачать
  1. Конструкторы и деструкторы в php-5. Вызов операций класса.

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

Большинство классов будет иметь специальный тип операции, называемый конструктором. Конструктор вызывается при создании объекта и обычно выполняет такие полезные задачи по инициализации, как установка приемлемых начальных значений атрибутов или создание других объектов, требуемых для данного объекта.

Конструктор объявляется так же, как и другие операции, но он имеет специальное имя __construct (). Это нововведение РНР5. В предыдущих версиях РНР функции конструктора получала то же имя, что и класс. для обратной совместимости, если в классе не определена функция __construct (), выполняется поиск функции, имя которой совпадает с именем самого класса.

Хотя конструктор можно вызвать вручную, его основное значение заключается в том, что он автоматически вызывается в момент создания объекта. Следующий код объявляет класс с конструктором:

class classname

{

function __construct ($param)

{

echo "Констуктор вызван с параметром $param <br>";

}

}

В настоящее время РНР поддерживает перегрузку функций, т.е. можно определять более одной функции с одним и тем же именем и различным количеством или типами параметров.

Деструкторы

Объект можно уничтожить в ходе выполнения сценария, вызвав функцию unset() и передав ей в качестве параметра имя объекта. Но в любом случае при завершении работы сценария память, занимаемая объектом, высвобождается, и объект из нее удаляется. В объектной модели РНР5 определена функция __destruct(), которая вызывается автоматически при уничтожении объекта.

Деструктор представляет собой противоположность конструктору. Механизм деструкторов появился в РНР5. Они позволяют выполнять определенные действия непосредственно перед уничтожением класса. Деструктор вызывается автоматически, когда все ссылки на класс удаляются или выходят за пределы области видимости.

Подобно именованию конструкторов, деструктор класса должен иметь имя __destruct (). Деструкторы не могут принимать параметры.

Вызов операций класса

Операции класса можно вызвать в основном темже способом, каким вызываются атрибуты класса. Если в нашем распоряжении имеется следующий класс:

class classname

{

function operation1()

{

}function operation2($param1, $param2)

{

}

}

и мы создаем объект типа classname с именем $a следующим образом:

$a = new classname ();

то мы можем вызвать операции так же, как вызывали другие функции: используя их имя и указывая в круглых скобках любые требуемые ими параметры. Поскольку эти операции принадлежат объекту, а не являются обычными функциями, необходимо указать объект, к которому они относятся. Имя объекта используется так же, как атрибуты объекта, а именно:

$a -> operation1();

$a -> operation2(12, 'test');

Если операции что-то возвращают, то возвращаемые данные можно получить следующим образом:

$x = $a -> operation1();

$y = $a -> operation2(12, 'test');

Если класс должен быть субклассом другого класа, для указания этого факта используется ключевое слово extends. Приведенный ниже код создает класс В, унаследованный от ранее определенного класса А.

class B extends A

{

var $attribute2;

function operation2()

{

}

}

Если класс А объявлен следующим образом:

class A

{

var $attribute1;

function operation1()

{

}

}

то все показанные ниже обращения к операциям и атрибутам объекта типа В будут допустимыми:

$b = new B();

$b ->operation1();

$b -> attribute1 = 10;

$b -> operation2();

$b -> attribute2 = 10;

Обратите внимание, что поскольку класс В является расширением класса А, к операции operation1() и атрибуту $attribute можно обращаться, хотя они и были объявлены в классе А. Будучи подклассом класса А, класс В обладает всеми его функциональными возможностями и данными. Кроме того, в классе В объявляются его собственные атрибут и операция.

Важно отметить, что наследование работает только в одном направлении. Подкласс, или дочерний класс, наследует характеристики своего родительского класса, или суперкласса, но родительский класс не получает характеристики своего дочернего класса. Это означает, что две последних строки в следующем коде неверны:

$а = new A() ;

$a -> operationl () ;

$a -> attributel = 10;

$a -> operation2 ( ) ;

$a->attribute2 = 10;

Класс А не имеет ни операции operation2 , ни атрибута attribute2.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]