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:
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 |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów |
|
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 4.08.2009 Ostrzeżenie: (0%)
|
Aj. Przykład pisałem na szybko, więc lekko go... zdeprawowałem - zamiast call_user_func($command, $arguments); używam call_user_func(array($this, $command), $arguments); .
|
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 304 Pomógł: 51 Dołączył: 4.02.2005 Skąd: Kraków Ostrzeżenie: (0%)
|
Podejżewam że u Ciebie zmienna $arguments jest tablicą argumentów, więc powinieneś używać funkcji call_user_func_array().
|
|
|
|
Post
#5
|
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk |
Metoda, która chcesz wywołać musi być publiczna (public) badz chroniona (protected)
Ten post edytował wookieb 4.08.2009, 15:45:06 |
|
|
|
Post
#6
|
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 4.08.2009 Ostrzeżenie: (0%)
|
-=Peter=- - Zmienna $arguments = NULL
Ten post edytował thre4d 4.08.2009, 18:34:30 |
|
|
|
Post
#7
|
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk |
Przeczytaj jeszcze raz co napisałem i zobacz jak masz u siebie.
|
|
|
|
Post
#8
|
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 4.08.2009 Ostrzeżenie: (0%)
|
wookieb - Zwracam honor. Przykład pisałem pod będąc pod wpływem środków wyskokowych. W rzeczywistym kodzie moja metoda jest chroniona, więc problem leży gdzieś indziej.
|
|
|
|
Post
#9
|
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk |
Ale ten kod, który podałem działa. Sprawdź. Wszystko już jest ok.
|
|
|
|
![]() ![]() |
|
Aktualny czas: 23.12.2025 - 23:30 |