Wielokrotnie używałem funkcji [call_user_func()](http://pl.php.net/function.call-user-func) i [call_user_func_array()](http://pl.php.net/function.call-user-func-array) do wywoływania zarówno metod obiektów, jak i metod statycznych. Nigdy dotąd jednak nie miałem potrzeby wywoływania w ten sposób metod „parenta”.
Jakież było moje zdziwienie kiedy po „odpaleniu” kodu
class A { protected function func($str) { echo $str; } } class B extends A { public function func($str) { call_user_func_array(array('parent', 'func' ), array($str)); } } $b = new B; $b->func('Hello World'); |
Zobaczyłem ostrzeżenie:
**Strict standards: Non-static method A::func() cannot be called statically, assuming $this from compatible context B in …**
No niby logiczne bo przecież wywoływana funkcja nie jest statyczna ale co zrobić w tej sytuacji? Przyznam się, że raczej nie wpadł bym samodzielnie na prawidłowe rozwiązanie.
call_user_func_array(array($this, 'parent::func' ), array($str)); |