Лучшая практика, переопределение __construct () по сравнению с предоставлением метода init ()

Когда вы создаете подклассы объектов и хотите расширить код инициализации, есть два подхода. Переопределение __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? Я знаю, что вы должны быть осторожны, чтобы не забывать вызывать конструктор суперкласса, но большинство программистов должны знать об этом.

РЕДАКТИРОВАТЬ: Я не использую Zend, я использую его только как пример кодовой базы, которая призывает вас использовать init () вместо переопределения __construct ().

Ответы на вопрос(5)

Ваш ответ на вопрос