Переход к PHP5 - Конструкторы
ОГЛАВЛЕНИЕ
Конструкторы
Основным недостатком структуры конструкторов в PHP4 является необходимость синхронизации имени конструктора и имени класса. Поскольку имя конструктора должно совпадать с именем класса, то, при изменении имени класса, приходится переименовывать и конструкторы. В случае, если класс имеет несколько наследников, приходится аккуратно изменять в классах наследниках наследуемый класс (extends) и вызов конструктора класса-предка (parent).
Введение в PHP5 конструктора для класса с общим именем __construct упрощает переименовывание классов во время их разработки. Если в классе есть и __construct и функция, имя которой совпадает с именем класса, то в качестве конструктора будет вызванно __construct. При перегрузке метода-конструтора вызов конструктора класса-предка осуществляется через parent::__construct().
Пример использования конструкторов:
class NewClass1 {
function __construct() {
print 'NewClass1::__construct called';
}
}
class NewClass2 extends NewClass1 {
}
class NewClass3 extends newClass2 {
function __construct() {
print 'NewClass3::__construct called';
parent::__construct();
}
}
$n1 = new NewClass1();
// выводится NewClass1::__construct called
$n2 = new NewClass2();
// выводится NewClass1::__construct called - конструктор унаследован и вызван
$n3 = new NewClass3();
// выводится NewClass3::__construct called и NewClass1::__construct called
При этом, если конструктор объявлен с модификатором private, то класс с таким конструктором создать невозможно. Однако обращение parent::__construct возможно. Это дает еще один способ избежать создания класса, помимо объявления его abstract.