Dynamiczne wywołanie funkcji parenta

Podziel się z innymi!

    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));
    Podziel się z innymi!

      Posted in PHP by Zbigniew Heintze · Tag: