Переход к 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.