Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: EventDispatcher, przesłanianie metody addListener w dziedziczeniu
Forum PHP.pl > Forum > PHP > Object-oriented programming
adbacz
Mam klasę EventDispatcher, w której znajduje się metoda addListener:
  1. class EventDispatcher
  2. {
  3. private $listeners = array();
  4. public function addListener($name, EventListener $listener)
  5. {
  6. }
  7. }

I inną klasę, która ma podobne zadanie, tylko zmienia się ciało funkcji addListener oraz notify (zmienia się cało, nie jej parametry (nie wklejam jej tutaj, bo nie o to chodzi), dlatego potrzebuję klasy dziedziczącej po EventDispacher):
  1. class PluginEventDispatcher extends EventDispatcher
  2. {
  3. private $listeners = array();
  4. public function addListener($name, PluginEventListener $listener)
  5. {
  6. }
  7. }

No i dwa interfejsy:
  1. interface EventListener
  2. {
  3. // ...
  4. }
  5.  
  6. interface PluginEventListener
  7. {
  8. // ...
  9. }


Problem zaczyna się gdy odpalam skrypt. Wyrzuca mi info, że "Strict standards: Declaration of PluginEventDispatcher::addListener() should be compatible with that of EventDispatcher::addListener()". Wiem, że chodzi o metodę addListener i jej drugi parametr (inne nazwy interfejsów), ale myślałem, że gdy przesłania się metodę, to ta przesłaniana jest całkowicie nadpisywana przez przesłoniętą (a raczej na odwrót), a nie, że muszą być kompatybilne.

Jak rozwiązać problem typowiania innych interfejsów?


EDIT:
Już zamiast interfejsów próbowałem użyć klasy EventListener oraz PluginEventListener i dziedziczenia tych klas, ale niestety wyskakuje ten sam błąd. Można to jakoś inaczej rozwiązać?
Crozin
1. Interfejs PluginEventListener powinien dziedziczyć po EventListener.
2. Nie pozostaje Ci chyba nic innego jak ręczne sprawdzanie przez instanceof czy przekazano odpowiedni parametr.
adbacz
Interfejsy mogą po sobie dziedziczyć? Od kiedy?
Poza tym, nie uważasz, że gdyby dziedziczenie miało pomóc, to pomogło by po zmianie interfejsów na klasy?

EDIT:
Zwracam honor, faktycznie można dziedziczyć. Nie wiedziałem o tym. Zaraz to sprawdzę...
nospor
Cytat
Interfejsy mogą po sobie dziedziczyć? Od kiedy?

http://pl1.php.net/manual/en/language.oop5.interfaces.php
adbacz
Niestety, dziedziczenie interfejsów niewiele tu pomogło - nadal ten sam błąd jest.

No zostaje mi faktycznie, sprawdzenie ręcznie przez instanceof, ale czy można ten roblem rozwiązać w jakiś inny sposób? Czy ma może ktos jakiś pomysł? Płacę jak za prezydenta!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.