ragnar_ok
@ragnar_ok

Как из экземпляра родительского класса вызвать метод дочернего?

Известно, что метод родительского класса ClassA::foo() можно переопределить и вызвать в методе дочернего:

class ClassB extends ClassA
{
  public function foo()
  {
    parent::foo();
  }
}


Можно ли каким-то образом сделать так, чтобы из экземпляра родительского класса вызывался метод дочернего?

Ожидаемый результат: ClassA::foo(); должен вызывать ClassB::foo();

Нужно унаследоваться от класса одной печально известной CMS. При этом не могу вносить никаких изменений в родительский класс, так как эта CMS периодически перезаписывает файл, содержащий этот класс.

Посоветуйте паттерн? Костыли подойдут.
  • Вопрос задан
  • 126 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
В родительском классе вместо self::foo() должно использоваться static::foo(), если речь про статический метод. Без изменения родительского класса этого добиться нельзя.
Но это при условии, что печально известная CMS вообще что-то знает о вашем классе и вызывает именно его, а не сам родительский. Если нет, то делать дочерний никакого смысла нет.

В печально известную CMS можно добавить смоук-тест в php_interface - вызывать нужный метод, и если результат отличается от ожидаемого, кидать ошибку с понятным текстом. Это позволит узнавать о перезаписи файла ядра при обновлении, но, не очень красиво, разумеется.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
LAPTOP.RU Москва
от 150 000 до 190 000 ₽
LAPTOP.RU Москва
от 130 000 до 170 000 ₽
LAPTOP.RU Кострома
от 25 000 до 65 000 ₽
07 мар. 2021, в 03:18
1500 руб./за проект
06 мар. 2021, в 22:58
70000 руб./за проект
06 мар. 2021, в 22:36
10000 руб./за проект