Когда вы создаете подклассы объектов и хотите расширить код инициализации, есть два подхода. Переопределение __construct () и реализация метода инициализации, который вызывает ваш конструктор суперкласса.
Метод 1:
class foo
{
public function __construct ($arg1, $arg2, $arg3)
{
// Do initialization
}
}
class bar extends foo
{
public function __construct ($arg1, $arg2, $arg3)
{
parent::__construct ($arg1, $arg2, $arg3);
// Do subclass initialization
}
}
Метод 2
class foo
{
public function init ()
{
// Dummy function
}
public function __construct ($arg1, $arg2, $arg3)
{
// Do subclass defined initialization
$this -> init ();
// Do other initialization
}
}
class bar extends foo
{
public function init ()
{
// Do subclass initialization
}
}
Документация для Zend Framework, кажется, препятствует переопределению конструкторов и требует, чтобы вы переопределяли методы init, где это предусмотрено, но это почему-то просто не подходит мне. Zend также склонен делать несколько вещей, которые меня не устраивают, поэтому я не уверен, стоит ли это использовать в качестве примера лучшей практики. Лично я считаю, что первый подход правильный, но второй подход я видел достаточно часто, чтобы задаться вопросом, действительно ли это то, что я должен делать.
Есть ли у вас какие-либо комментарии относительно переопределения __construct? Я знаю, что вы должны быть осторожны, чтобы не забывать вызывать конструктор суперкласса, но большинство программистов должны знать об этом.
EDIT:
Я не использую Zend, я использую его только как пример кодовой базы, которая призывает вас использовать init () вместо переопределения __construct ().