Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z kompatybilnością metod
Forum PHP.pl > Forum > PHP > Object-oriented programming
Spawnm
Witam,
dziś spotkałem się z błędem o treści:
  1. Declaration of sf_orm::select() should be compatible with that of sf_db::select()


budowa klas wygląda mniej więcej tak:
  1. class db{
  2. protected static $db=array();
  3. protected $sql;
  4. protected $sql_args;
  5. protected $query;
  6. public function select($co,$z ,$itd=array()){
  7. //self:biggrin.gifb[]
  8. //$this->sql='';
  9. ///itd itp...
  10. return $this;
  11. }
  12. }
  13. class db2 extends db{
  14.  
  15. public function select($co,$z ,$itd=array()){
  16. //nic lub coś innego ...
  17. }
  18. }

I błąd powstaje,
jednak przy takiej budowie już nie:
  1. class x {
  2. protected static $x;
  3. protected $z;
  4. public function connect(){
  5. self::$x=555;
  6. }
  7.  
  8. public function select(){
  9. echo self::$x;
  10. $this->z=11;
  11. return $this;
  12. }
  13.  
  14. public function id(){
  15. echo $this->z;
  16. }
  17. }
  18. class y extends x{
  19. public function select($x=5){
  20. return parent::select();
  21. }
  22. }
  23. $x=new x;
  24. $x->connect();
  25. $z=new y;
  26. $c=$z->select()->id();

Co dokładnie powoduje ten błąd?
Jakieś propozycje jak rozwiązać tez problem?
wookieb
Nie wiem czy na pewno podajesz dobry kod ponieważ
Declaration of sf_orm::select() should be compatible with that of sf_db::select()

Twój przykład działa dobrze.
Spawnm
Hmm w przykładzie zmieniłem nazwy klas na krótsze.
Jednak wracając do błędu co konkretnie może go powodować?
Z testów już widzę że nie zawartość metod select() ... extends jest przeprowadzany poprawnie.
Zyx
Wklej właściwy kod bez żadnych modyfikacji, bo albo coś pomieszałeś podczas "upraszczania", albo problem leży w zupełnie innym miejscu niż to, które wkleiłeś.
wookieb
Taki błąd najczęściej spotykam przy pracy z klasami abstrakcyjnymi bądź interfejsami.
Twoja klasa Db (oraz ta metoda) jest abstrakcyjna (tego nie ma na przykładzie) albo jest interfejsem. Bez prawdziwego kodu nie będziemy w stanie nic powiedzieć.
Po prostu lista argumentów (ich typy itd) powinna być taka sama jak w klasie sf_db.
Spawnm
A i tu był pies pogrzebany , w sf_orm::select nie pobierał $table bo nie musiał.
Dobra, już sobie poradziłem , dzięki na nakierowanie z tymi argumentami smile.gif
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.