Это - плохая практика для объявления ctor 'финала' класса в PHP?

Если у меня есть родительский класс, который расширяется партиями и много других классов, и я хочу удостовериться, что конструктор родительского класса ВСЕГДА выполняется, это плохая идея объявить конструктора final?

Я думал о выполнении чего-то вроде этого:

class ParentClass {

    public final function __construct() {

        //parent class initialization...

        $this->construct();

    }

    protected function init() {

        echo 'constructing<br>';

    }

}

class ChildClass extends ParentClass {

    protected function init() {

        //child class initialization

        echo 'constructing child<br>';

    }

}

тем путем дочерний класс может иметь своего рода конструктора, и конструктор родительского класса будет всегда выполняться. Эта плохая практика?

7
задан Carson Myers 3 January 2010 в 01:24
поделиться

2 ответа

Объявление final __construct гарантирует, что никто, кто расширяет ваш класс, не сможет реализовать метод с таким же именем. Внешне это выглядит так, как будто никто другой не может объявить конструктор для подклассов этого класса, но это не так, так как PHP 4 в стиле ClassName() все еще прекрасно работает как альтернативное имя для конструктора. Так что на самом деле, объявление конструктора окончательным ничего не даст вам в PHP.

.
10
ответ дан 6 December 2019 в 15:23
поделиться

После завершения работы конструктора нельзя передавать никакие переменные в инициализирующую функцию. Это заставляет пользователей вашего класса использовать глобулы в качестве настроек для своих дочерних классов.

В Zend Framework использование переопределяемой функции init() является обычной практикой, но я никогда не видел там доработки конструктора.

-1
ответ дан 6 December 2019 в 15:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: