Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> dziedziczenie po klasie abstrakcyjnej
squid
post
Post #1





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

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


jest taki kod, dla uprosczenia skopiowany z ksiazki ale podobny do mojego przypadku

  1. <?php
  2. abstract class Database {
  3.  
  4.     abstract public function connect( );
  5.  
  6.     abstract public function query( );
  7.  
  8.     abstract public function fetch( );
  9.  
  10.     abstract public function close( );
  11.  
  12. }
  13. ?>


  1. <?php
  2. class MySQL extends Database {
  3.  
  4.     protected $dbh;
  5.  
  6.     protected $query;
  7.  
  8.  
  9.  
  10.     public function connect($server, $username, $password) {
  11.  
  12.         $this->dbh = mysql_connect($server, $username, $password);
  13.  
  14.     }
  15.  
  16.  
  17.  
  18.     public function query($sql) {
  19.  
  20.         $this->query = mysql_query($sql, $this->dbh);
  21.  
  22.     }
  23.  
  24.  
  25.  
  26.     public function fetch( ) {
  27.  
  28.         return mysql_fetch_row($this->query, $this->dbh);
  29.  
  30.     }
  31.  
  32.  
  33.  
  34.     public function close( ) {
  35.  
  36.         mysql_close($this->dbh);
  37.  
  38.     }
  39.  
  40. }
  41. ?>


kiedy zainkluduje obie klasy do skryptu otzymuje komunikat:

Fatal error: Declaration of MySQL::connect() must be compatible with that of Database::connect() in 2.php on line 40

kiedy zmienia klase abstrakcyja na:
  1. <?php
  2. abstract class Database {
  3.  
  4.     abstract public function connect( $server, $username, $password);
  5.  
  6.     abstract public function query( $sql);
  7.  
  8.     abstract public function fetch( );
  9.  
  10.     abstract public function close( );
  11.  
  12. }
  13.  ?>

bledu nie ma, czy to znaczy ze atrybuty metody abstrakcyjnej musza sie zgadzac z atrybutami metody dziedziczacej?

Ten post edytował squid 24.03.2005, 18:08:29
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
bela
post
Post #2


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

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


Tak (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
squid
post
Post #3





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

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


no normalnie nie wnioslbym sprzeciwy ale powyzszy przyklad skopiowalem z ksiazki: Upgrading to php 5. Taki blad w ksiazce?
co sie na tym swiecie dzieje (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
thnx
Go to the top of the page
+Quote Post
SongoQ
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Cytat
Abstrakcja wskazuje natomiast nie tylko jakie funkcje mozemy wywolac na obiekcie ale tak w jaki sposob mamy ta funkcje wywolac (z jakimi argumentami) oraz co powinnismy otrzymac spowrotem (okreslony typ danych - w php5 nie ma czegos takiego).


Ok, jesli to prawda co piszesz to skad sie wzial blad?? Czyli jednak php5 dziala tak jak powinien, musisz zdeklarowac w klasie abstrakcyjnej wszystkie parametry.


Cytat
no normalnie nie wnioslbym sprzeciwy ale powyzszy przyklad skopiowalem z ksiazki


Bledy sie zdazaja, a najgorsze jest to ze w manualach i w ksiazkach. W ksiazce do Postgresa "PostgreSQL - praktyczny przewodnik" autor/tlumacz tak sie rozpedzil z tlumaczeniem ze przetlumaczyl kod sql.
Go to the top of the page
+Quote Post
NuLL
post
Post #5





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


@seraf - a czy ideą interfejsu jest brak instancji również (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Czy pomylilem z Services...
Go to the top of the page
+Quote Post
DeyV
post
Post #6





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




Pytanie wydaje mi się nieco nie przemyślane.
Jak można wyobrazić sobie instancję interfejsu, czyli takiej klasy, która nie ma żadnego "ciała" ?
Go to the top of the page
+Quote Post
bela
post
Post #7


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

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


Cytat(NuLL @ 2005-03-24 21:02:49)
@seraf - a czy ideą interfejsu jest brak instancji również (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Czy pomylilem z Services...

Dla mnie ideą interfejsu jest wymuszenie określonego intejfejsu (IMG:http://forum.php.pl/style_emoticons/default/dry.gif) (Głupio to brzmi ;])
Np piszemy sobie klasę do obsługi bazy danych i dajemy możliwość rozszerzania o kolejne sterowniki dla różnych baz, wtedy pisze jakiś interfejs dla tych sterowników i mamy pewność, że te metody będą zaimplementowane (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Imperior
post
Post #8





Grupa: Zarejestrowani
Postów: 105
Pomógł: 0
Dołączył: 16.10.2004

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


W interfejsach też podaje się listę argumentów! Interfejs jest właśnie po to, aby można było sprecyzować co ma klasa!
Go to the top of the page
+Quote Post
bela
post
Post #9


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

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


Cytat(serafin @ 2005-03-25 09:58:12)
Interfejs w tym przypadku jest tylko lista metod ktore musimy zaimplementowac a Abstrakcja to jak je musimy zaimplementowac (lacznie z lista argumentow)

serafin, zobacz co się stanie jak zaimplementujesz w ten sposób interfejs
  1. <?php
  2. interface IFoo {
  3.  public function bar($foo);
  4. }
  5.  
  6. class Foo implements IFoo {
  7.  publuc function bar() {}
  8. }
  9. ?>


(IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.08.2025 - 15:31