Иногда мне нужно выполнить метод grandparent (то есть обходить родительский метод), я знаю, что это запах кода, но иногда я не могу изменить другие классы (фреймворки, библиотеки и т.д.).
В PHP мы можем сделать что-то вроде:
call_user_func(array(get_parent_class(get_parent_class($childObject)), 'grandParentMethod'));
Проблема в том, что если у вас есть ошибки E_STRICT, вы получите сообщение об ошибке:
Строгие стандарты: нестатический метод GrandParent:: grandParentMethod() не следует называть статически...
Я нашел только одно решение для этого (без удаления E_STRICT), и он просто добавляет @
для подавления ошибки.
Но что действительно уродливо, знает ли кто-нибудь лучшее решение?
Спасибо! PS: Я не могу создать экземпляр нового объекта, например:
$grandparent = get_parent_class(get_parent_class($son));
$gp= new $grandparent;
$gp->grandParentMethod
потому что мне нужно вызвать мой метод бабушки и дедушки в контексте $son.