Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przeciazanie metod abstrakcyjnych
Forum PHP.pl > Forum > PHP
Skorpion
Moze mi ktos wyjasnic czemu to wywala blad? I wobec tego jak stworzyc metode pochodna?

  1. <?php
  2. class SomeClass {}
  3. class AnotherClass extends SomeClass {}
  4.  
  5. abstract class ParentClass
  6. {
  7. public abstract function someMethod(SomeClass $obj);
  8. }
  9.  
  10. class ChildClass extends ParentClass
  11. {
  12. public function someMethod(AnotherClass $obj) {}
  13. }
  14. ?>


wywala:
Kod
Fatal error: Declaration of ChildClass::someMethod() must be compatible with that of ParentClass::someMethod()
dr_bonzo
W php nie ma przeciazania (czy jak to sie zwie) metod, tzn mozesz miec tylko jedna metode [edit: w jednej klasie] o danej nazwie.

Mozesz wyrzucic deklaracje typow parametrow tych metod.
Skorpion
Hm.. Dziwne, bo jesli mamy do czynienia z przeciazaniem nieabstrakcyjnych metod to dziala
  1. <?php
  2. class SomeClass
  3. {
  4. public function __toString()
  5. {
  6. return get_class($this);
  7. }
  8. }
  9.  
  10. class AnotherClass extends SomeClass {}
  11.  
  12.  
  13.  
  14. class ParentClass
  15. {
  16. public function someMethod(SomeClass $obj)
  17. {
  18. return $obj->__toString();
  19. }
  20. }
  21.  
  22. class ChildClass extends ParentClass
  23. {
  24. public function someMethod(AnotherClass $obj)
  25. {
  26. return parent::someMethod($obj);
  27. }
  28. }
  29.  
  30. $objX = new AnotherClass();
  31.  
  32. $objY = new ChildClass();
  33. echo $objY->someMethod($objX);
  34. ?>


Wyswietla: AnotherClass
nospor
Cytat
Dziwne, bo jesli mamy do czynienia z przeciazaniem nieabstrakcyjnych metod to dziala
Jakie przeciązanie? Przeciązanie masz wtedy gdy w jednej klasie istenieje kilka takich samych metod o identycznych nazwach, ale rozniących sie parametrami. Tu masz zwykle dziedziczenie.
A metoda abstrakcyjna wymaga, by metoda ktora po niej dziedziczy miala identyczną definicje, a nie jak u Ciebie rózna
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.