Дипломные работы, курсовые проекты на заказ, контрольные работы на заказ

 
Начертательная геометрия Практикум по решению задач Геометрическое черчение Инженерная графика ЕСКД Кратные интегралы Математический анализ Матрицы Пределы Производные Векторная алгебра Интегральное исчисление ТФКП Ядерная физика Электростатика Магнетизм Оптика Информационные технологии
Учебник РНР
НазадГлава 13. Классы и Объекты Вперёд

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

Внимание!

В PHP 3 и PHP 4 конструкторы ведут себя по-разному. Предпочтительна исключительно семантика PHP 4.

Конструкторы это функции класса, которые автоматически вызываются при создании нового экземпляра класса операцией new. В PHP 3 функция становится конструктором, когда она имеет то же имя, что и класс. В PHP 4 функция становится конструктором, когда она имеет то же имя, что и класс, в котором она определена - разница незаметна, но существенна (см. далее).

// 
Работа с PHP 3 и PHP 4. class Auto_Cart extends Cart { function Auto_Cart() { 
$this->add_item ("10", 1); } }

Здесь определяется класс Auto_Cart, который является Cart плюс конструктор, который инициализирующий cart одним элементом номер "10" всякий раз, когда новый Auto_Cart создаётся с помощью "new". Конструкторы могут принимать аргументы, и эти аргументы не обязательны, что делает эти конструкторы более используемыми. Чтобы иметь возможность использовать класс без параметров, все параметры конструкторов нужно сделать необязательными/optional, предоставив значения по умолчанию.

// Работа в PHP 3 и в PHP 4. class Constructor_Cart extends Cart { function 
Constructor_Cart($item = "10", $num = 1) { $this->add_item ($item, $num); 
} } // Использовать ту же заглушку. $default_cart = new Constructor_Cart; // Создать 
новый ... $different_cart = new Constructor_Cart("20", 17);

Вы можете также использовать операцию @ для подавления ошибок, возникающих в конструкторе, например, @new.

Внимание!

В PHP 3 получаемые классы и конструкторы имеют некоторые ограничения. Следующие примеры нужно внимательно разобрать, чтобы понять эти ограничения.


class A { function A() { echo "I am the constructor of A.<br>\n"; 
} } class B extends A { function C() { echo "I am a regular <br>\n"; } 
} // в PHP 3 конструктор не вызывается. $b = new B;

В PHP 3 никакой конструктор в вышеприведённом примере не вызывается. Правило PHP 3 таково: 'Конструктор это функция с тем же именем, что и класс'. Имя класса - B, а функции с именем B() в классе B нет. Ничего не происходит.

Это исправлено в PHP 4 путём введения нового правила: если класс не имеет конструктора, вызывается конструктор базового класса, если он имеется. В РНР 4 предыдущий пример выведет 'I am the constructor of A.<br>'.

class 
A { function A() { echo "I am the constructor of A.<br>\n"; } function 
B() { echo "I am a regular function named B in class A.<br>\n"; echo "I 
am not a constructor in A.<br>\n"; } } class B extends A { function C() 
{ echo "I am a regular <br>\n"; } } // Это вызов B() как конструктора. 
$b = new B;

В PHP 3 функция B() в классе A станет конструктором в классе B, хотя это никак не предполагается. Правило PHP 3: 'Конструктор это функция с тем же именем, что и класс'. PHP 3 не заботиться о том, определяется ли функция в классе B или наследуется.

Это изменено в PHP 4 путём модификации правила: 'Конструктор это функция с тем же именем, что и класс, в котором она определяется'. Таким образом, в PHP 4 класс B может не иметь собственной функции-конструктора, и будет вызван конструктор базового класса, печатая 'I am the constructor of A.<br>'.

Внимание!

Ни PHP 3, ни PHP 4 не вызывают конструктор базового класса автоматически из конструктора получаемого класса. Вы сами должны поместить вызовы конструкторов в нужных местах.

Примечание: в PHP 3 и PHP 4 нет деструкторов. Вы можете использовать register_shutdown_function() для симуляции большей части работы деструкторов.

Деструкторы это функции, вызываемые автоматически при уничтожении объекта в процессе работы функции unset() или просто при выходе за пределы области видимости. В PHP нет деструкторов.


Назад Оглавление Вперёд
extendsВверх::