ragnar_ok
@ragnar_ok

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

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

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


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

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

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

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

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

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

Похожие вопросы