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

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

  

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

  

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

  

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

  

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

  

Посоветуйте паттерн? Костыли подойдут. 

 В родительском классе вместо `self::foo()` должно использоваться `static::foo()`, если речь про статический метод. Без изменения родительского класса этого добиться нельзя.  

Но это при условии, что печально известная CMS вообще что-то знает о вашем классе и вызывает именно его, а не сам родительский. Если нет, то делать дочерний никакого смысла нет.  

  

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