У меня есть абстрактный класс (упрощенно для демонстрации):
abstract class MyClass {
protected $id = "";
protected $title = "";
function __construct($title) {
$this->id = strtolower($title);
$this->titulo = $title;
}
abstract function render();
}
Я хочу добавить второй конструктор, в котором будет передаваться не только заголовок, но и идентификатор, но, похоже, в PHP нет перегрузки методов. Ища в Интернете, я нашел сообщение о переполнении стека , где они предлагают создать статический метод, который будет создавать и возвращать экземпляр того же объекта, и функционировать как альтернативный конструктор . Примерно так:
static function create($id, $title) {
$instance = new self($title);
$this->id = $id;
return $instance;
}
Это прекрасно работает в обычных классах, но не работает с абстрактными классами, подобными приведенным выше. Например, когда вы делаете что-то вроде $myclass = MyClass::create("id", "title");
, я получаю сообщение об ошибке:
Исключение: невозможно создать экземпляр абстрактного класса MiClase
это происходит в строке $instance = new self($title);
и имеет смысл, поскольку оно пытается создать экземпляр собственного класса, который является абстрактным классом, что недопустимо.
Возможно ли иметь альтернативные конструкторы для абстрактных классов в PHP?