Почему нельзя переопределить 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(); уже не получается.
В 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 без изменения конструктора.
В 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 без изменения конструктора.