Когда вы подклассифицируете объекты и хотите расширить код инициализации, существует два подхода. Переопределение __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().