Почему нельзя переопределить construct при наследовании? Вот просто пример: (php5)class T{
public function __construct(){}
}class S extends T{
private function __construct(){
// code
}
}
Ругань идет по причине того, что php не хочет делать из public private. Но почему?
Идея в том, чтобы запретить создавать экземпляры объекта S в последствии сделав его синглтоном.
Придумал некий хук, но он работает пока есть совместимость (я так понял):class S extends T{
private function S(){
// код
}
}
Тогда все прокатывает и сделать что-то типа того$s = new S();
уже не получается.

21 Авг 2019 в 07:06
158 +1
0
Ответы
1

В PHP нельзя переопределить конструктор (__construct) при наследовании из-за того, что конструктор не является обычным методом класса. Конструктор имеет особое значение и вызывается автоматически при создании нового объекта класса. Поэтому PHP не позволяет изменять его уровень доступа, так как это может привести к непредсказуемым результатам и нарушению принципов ООП.

В вашем примере, попытка объявить конструктор в классе-потомке как private вызывает ошибку, так как вы пытаетесь изменить область видимости метода, который должен быть доступен извне для создания объекта.

Если вам нужно ограничить создание экземпляров объекта S и сделать его синглтоном, лучше воспользоваться паттерном Singleton, который предусматривает статический метод для создания единственного экземпляра класса.

Пример использования Singleton в PHP:

class S {
private static $instance;
private function __construct() {
// код инициализации
}
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
}
// Создание экземпляра
$s = S::getInstance();

Таким образом, вы можете обеспечить ограниченное создание экземпляров и контроль над объектом класса S без изменения конструктора.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 96 424 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир