Как обойти final конструктор? В общем решил я немного расширить стандартный SimpleXMLElement для собственных нужд, и мне нужно при инициализации объекта вызвать конструктор родительского класса SimpleXMLElement.
Вот только не тут то было: конструктор родительского класcа оказался финальным, и перегрузить его конструктором наследника не получается.
Вопрос: как обойти?class MyClass extends SimpleXMLElement {
function __construct() {
parent::__construct('');
}
}PHP Fatal error: Cannot override final method SimpleXMLElement::__construct()

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

К сожалению, конструктор класса SimpleXMLElement действительно объявлен как final, что означает, что его нельзя переопределить в наследнике. Однако, вы можете обойти это ограничение, используя метод-фабрику (фабричный метод) вместо конструктора.

Пример:

class MyClass extends SimpleXMLElement {
public static function create() {
return new self('<data></data>');
}
}
$obj = MyClass::create();

В этом случае, вы создаете статический метод create() в вашем наследнике MyClass, который создает и инициализирует объект MyClass. Теперь вместо создания объекта напрямую с помощью new MyClass(), вы вызываете статический метод create().

Надеюсь, это поможет вам обойти ограничение final конструктора в классе SimpleXMLElement.

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