Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Przeciazanie metod abstrakcyjnych
Skorpion
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 1.02.2003

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


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()


Ten post edytował Skorpion 5.06.2007, 13:15:48
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


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.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Skorpion
post
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 1.02.2003

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


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
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 04:54