Задать вопрос
@ragnar_ok

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

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

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


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

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

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

Посоветуйте паттерн? Костыли подойдут.
  • Вопрос задан
  • 278 просмотров
Подписаться 2 Средний 3 комментария
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
В родительском классе вместо self::foo() должно использоваться static::foo(), если речь про статический метод. Без изменения родительского класса этого добиться нельзя.
Но это при условии, что печально известная CMS вообще что-то знает о вашем классе и вызывает именно его, а не сам родительский. Если нет, то делать дочерний никакого смысла нет.

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

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽