Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wywołanie call_user_func
thre4d
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 4.08.2009

Ostrzeżenie: (0%)
-----


Powitać.

Mam do czynienia z następującym problemem: klasa B dziedziczy po klasie A. W klasach dziedziczących po A chcę sprawdzać czy istnieje w nich jakaś metoda przy pomocy if (method_exists($this, $command), następnie jeśli została ona odnaleziona, powinna zostać wywołana poprzez call_user_func($command, $arguments); . Ponieważ czynność ta będzie powtarzać się w każdej klasie potomnej po A, chcę to zrobić jak należy, poprzez zapisanie tego w postaci metody klasy A. Tak więc mamy:

  1. <?php
  2. class A {
  3.  
  4. protected function CheckMethod($command, $arguments=null)
  5. {
  6.       // dajmy na to, że $command = 'jakasMetoda'
  7.       if (method_exists($this, $command))
  8.       {echo 'Znaleziono!';
  9.         call_user_func(array($this, $command), $arguments);
  10.       }
  11. }
  12. }
  13. ?>



  1. <?php
  2. class B extends A {
  3.  
  4.   public function __construct($command, $arguments=null)
  5.    {  
  6.        $this -> CheckMethod($command, $arguments);
  7.    }
  8.  
  9.   protected function jakasMetoda()
  10.   {
  11.        echo 'OK';
  12.   }
  13. }
  14. ?>



I owszem, tworzę obiekt klasy B, if (method_exists($this, $command)) zwraca TRUE, metoda jakasMetoda jest widziana w klasie potomnej ( B ), ale wywołanie jej kończy się komunikatem First argument is expected to be a valid callback in (...) .

Gdy umieszczę metodę CheckMethod() w klasie potomnej, to naturalnie wszystko działa poprawnie. Nie chcę jednak ładować tego kodu do każdej z klas, bo po to mam mechanizm dziedziczenia aby oszczędzić sobie nadmiarowej roboty.

Jakieś pomysły?

Ten post edytował thre4d 4.08.2009, 18:32:00
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.12.2025 - 21:01