Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] interface
Forum PHP.pl > Forum > Przedszkole
plej
  1. interface Band {
  2. public function getName();
  3. public function GetGenre();
  4. public function addMusician();
  5. public function getMusicians();
  6. }
  7.  
  8. interface Musician {
  9. public function addInstrument();
  10. public function getInstruments();
  11.  
  12. public function assignToBand();
  13. public function getMusicianType();
  14. }
  15.  
  16. interface Instrument {
  17. public function getName();
  18. public function getCategory();
  19. }
  20.  
  21. class Guitarist implements Musician {
  22. private $last;
  23. private $first;
  24. private $musicianType;
  25.  
  26. private $instruments;
  27. private $bandReference;
  28.  
  29. function __construct($first, $last) {
  30. $this->last = $last;
  31. $this->first = $first;
  32. $this->instruments = array();
  33. $this->musicianType = "gitarzysta";
  34. }
  35.  
  36. public function getName() {
  37. return $this->first . " ". $this->last;
  38. }
  39.  
  40. public function addInstrument(Instrument $instrument) {
  41. array_push($this->instruments, $instrument);
  42. }
  43.  
  44. public function getInstruments() {
  45. return $this->instruments;
  46. }
  47.  
  48. public function getBand() {
  49. return $this->$bandReference;
  50. }
  51.  
  52. public function assignBand(Band $band) {
  53. $this->$bandReference = $band;
  54. }
  55.  
  56. public function getMusicianType() {
  57. return $this->musicianType;
  58. }
  59.  
  60. public function setMusicianType($musicianType) {
  61. $this->musicianType = $musicianType;
  62. }
  63. }
  64.  
  65. class LeadGuitarist extends Guitarist {
  66. function __construct($last, $first) {
  67. parent::__construct($last, $first);
  68. $this->setMusicianType("główny gitarzysta");
  69. }
  70. }
  71.  
  72. class RockBand implements Band {
  73. private $bandName;
  74. private $bandGenre;
  75. private $musicians;
  76.  
  77. function __construct($bandName) {
  78. $this->bandName = $bandName;
  79. $this->musicians = array();
  80. $this->bandGenre = "rock";
  81. }
  82.  
  83. public function getName() {
  84. return $this->bandName;
  85. }
  86.  
  87. public function getGenre() {
  88. return $this->bandGenre;
  89. }
  90.  
  91. public function addMusician(Musician $musician) {
  92. array_push($this->musicians, $musician);
  93. $musicians->assignToBand($this);
  94. }
  95.  
  96. public function getMusicians() {
  97. return $this->musicians;
  98. }
  99. }
  100.  
  101. class Guitar implements Instrument {
  102.  
  103. private $name;
  104. private $category;
  105.  
  106. function __construct($name) {
  107. $this->name = $name;
  108. $this->category = "gitary";
  109. }
  110.  
  111. public function getName() {
  112. return $this->name;
  113. }
  114.  
  115. public function getCategory() {
  116. return $this->category;
  117. }
  118. }
  119.  
  120. // test Obiektów.
  121. $band = new RockBand("Czerwone Zmienne");
  122. $bandMemberA = new Guitarist("Michał", "Zmiennoprzecinkowy");
  123. $bandMemberB = new LeadGuitarist("Grzegorz", "Całkowity");
  124.  
  125. $bandMemberA->addInstrument(new Guitar("Gibson Les Paul"));
  126. $bandMemberB->addInstrument(new Guitar("Fender Stratocaster"));
  127. $bandMemberB->addInstrument(new Guitar("Hondo H-77"));
  128.  
  129. $band->addMusician($bandMemberA);
  130. $band->addMusician($bandMemberB);
  131.  
  132. foreach($band->getMusicians() as $musician) {
  133. echo "Muzyk" .$musician->getName() ."<br>";
  134. echo "to " .$musician->getMusicianType() ."<br>";
  135. echo "w zespole grającym " .$musician->getBand()->getGenre() ."<br>";
  136. echo "o nazwie " .$musician->getBand()->getName() ."<br>";
  137.  
  138. foreach($musician->getInstruments() as $instrument) {
  139. echo "Jego instrument to " .$instrument->getName() ." ";
  140. echo "(" .$instrument->getCategory() .")<br>";
  141. }
  142. echo "<p>";
  143. }



Cytat
Fatal error: Declaration of Guitarist::addInstrument() must be compatible with that of Musician::addInstrument() in /opt/lampp/htdocs/nauka/index.php on line 26



Cześć biggrin.gif
U góry kod php i błąd wie ktoś w czym problem tu jest? bo ja nie umiem sb z tym poradzić:/
obiektowego uczę się pare dni dopiero jak coś...
Z góry thx.smile.gif


EDIT:

linia 26 nie,
  1. class Guitarist implements Musician {

czyli linia 21 to błąd.
ten fragment porostu nie ma znaczników php i zapominałem siębiggrin.gif
nospor
Cytat
obiektowego uczę się pare dni dopiero jak coś...
A angielskiego ile się uczysz? Translatatory już nie działają? Przecież komunikat błędu wyraźnie mówi co jest nie tak.

Definicja addInstrument() ma być dokładnie taka sama jak w intefejsie. A nie ty sobie nagle dodajesz parametry, których nie ma w interfejsie
plej
ale tak jest w książce haha.gif dokładnie przepisane..
czyli co muszę zrobić? sryy ale jestem zielony w obiektowym jeszcze:D
nospor
zrób zdjęcie i nam wklej. Bo nie wierzę, że tak jest w książce wink.gif
A pisali w tej książce na jakiej wersji php operują?
phpion
W interfejsie zmień:
  1. public function addInstrument();

na:
  1. public function addInstrument(Instrument $instrument);
Daiquiri
Porównać public function addInstrument(); z interfejsu i public function addInstrument(Instrument $instrument) z klasy implementującej interfejs.
plej
No to patrz łap screnna:
http://zapodaj.net/upload.html

nie ma tak jak koledzy wyżej napisali... biggrin.gif
nospor
A co ty mi dajesz? Link do uploadu? Ty mi daj link do zdjęcia a nie do uploadu tongue.gif
plej
Zmieniłem jak powiedzieliście ii mam next problem haha.gif
Cytat
Fatal error: Class Guitarist contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Musician::assignToBand) in /opt/lampp/htdocs/nauka/index.php on line 68


czyli -5 linijek to 63 linia:|



sory haha.gif masz linka: http://zapodaj.net/7f7a35e6f8f3.png.html
Daiquiri
Plej, zacznij czytać komunikaty. Masz zadeklarowaną metodę, której później nie implementujesz w klasie (assignToBand). Korzystasz z interfejsów, nie klas abstrakcyjnych.


Widzisz, w "lewych" książkach zawsze są błędy tongue.gif.
plej
ehh no czytam komunikaty i tłumacze ale poprostu nie wiem co jest nie tak:/ ja dopiero nie wiem 3dni w obiektowym się bawie:/
ten ebook jest zły haha.gif z 2005 roku haha.gif dopiero zobaczyłem:] muszę innego znaleźć na czas zanim do pl wróce.
Daiquiri
To zacznij najpierw od teorii. Doczytaj do czego mogą służyć interfejsy, a potem zacznij klepać kod.
plej
oka ale wiesz gdzie mogę sobie o tym poczytać? bo ja szukałem parę dni coś konkretnego i nie znalazłem może złe szukam:] ehh to php.. a obiektowe to jak narazie mnie dobija strasznie:D
Daiquiri
W Internecie smile.gif. Jak zerkniesz nawet tutaj, to przeczytasz "(...)Jednak gdy pragniemy jedynie zdefiniować listę zachowań, których oczekujemy, bez wnikania w szczegóły ich działania, interfejsy są o wiele lepszym pomysłem, gdyż mogą być implementowane niezależnie oraz nie zamykają drogi do dziedziczenia."

Wnioski: Twój błąd nr 2, była definicja, natomiast zabrakło implementacji smile.gif. Twój błąd nr 1, definicja nie oddawała natury implementacji.

Podstawa to czytanie ze zrozumieniem.
plej
spoko tak czytam z zrozumieniem ale i tak mi coś nie wchodzi może pora odpocząć o tego kompa na parę dni:)
wgl to mam ebooka dla zaawansowanych mimo że stary ale dla zaawansowanych:) może poczekam aż już będę w Polsce i kupie sobie książki od podstaw i najnowsze heh..


Dzięki za all:)
olechafm
generalnie powiem Ci szczerze, że wywal tę książkę do śmieci tylko Ci zamiesza w głowie i dopadnie Cię frustracja, przy kolejnych przykładach tam podanych...gdyby nie to, że też miałem ją w tej wersji, w której ty ją masz (elektroniczna, skany w formacie DjVu) to bym ją spalił, a tak szkoda kompa palić...

sory za to małe OT
plej
Spoko wywalę smile.gif

te książki sobie kupię :
http://helion.pl/ksiazki/programowanie-obi...m?r_from=PHPOB3
i
http://helion.pl/ksiazki/php-obiekty-wzorc...stra,phpob3.htm
ale to za miesiąc jak już w Polsce będę.
Chciałem przez też czas zdobyć solidną wiedzę a tu zamiast wiedzy mam zamęt w głowie he haha.gif
olechafm
ta pierwsza Hasina Haydera też nie grzeszy zajebistością (klasa to to samo co obiekt (wicked sic!!!)) ale pozwoli Ci zrozumieć podstawowe założenia architektury aplikacji i MVC, a po drugim przeczytaniu też będziesz chciał ją spalić smile.gif ale prawda jest taka, że nie ma dobrych publikacji po Polsku z PHP obiektowego
plej
wiem wiem:) ale chodzi o zrozumienie tego:) reszta już powinna zrobić wprawa tak jak mi to poszło z strukturalnym:) czytałem książkę cały czas i nic:D dopiero jak zacząłem pisać jakieś skrypty wyszła ta wiedza:D:D
Daiquiri
Prawda, że pierwsza pozycja nie jest może taka jak by się chciało, ale w sposób pobieżny może nakierować na pewne rozwiązania. Przyznam szczerze, że początek tylko przekartkowałam, bo kupiłam ją z racji zapotrzebowania na publikację o wzorcach projektowych. Z tego co widzę (zerknęłam z ciekawości!) to jest tam definicja klasy jako "szablonu obiektu". Olechafm, gdzie znajduje się zapis o tym, że klasa == obiekt smile.gif?
dboss
Książka z której jest podany przykład (PHP5. Zaawansowane programowanie) ogólnie jest bardzo ciekawa, ale ilość błędów jaka jest w listingach potrafi mocno zirytować. Wygląda to tak jakby nikt ich w ogóle nawet nie próbował odpalić. Najbardziej śmiać mi się chciało jak zobaczyłem zapis $this->$wlasciwosc. O ile błędy na na takim poziomie jakie są w tym temacie jestem sam w stanie wykryć to jak przejdę do czegoś bardziej zaawansowanego może być ciężej.

Szukałem w necie poprawionej wersji, ale nie udało mi się znaleźć. Może ktoś z Was przerobił tą książkę i ma wszystko działające?
olechafm
Cytat(Daiquiri @ 7.06.2011, 12:12:30 ) *
Prawda, że pierwsza pozycja nie jest może taka jak by się chciało, ale w sposób pobieżny może nakierować na pewne rozwiązania. Przyznam szczerze, że początek tylko przekartkowałam, bo kupiłam ją z racji zapotrzebowania na publikację o wzorcach projektowych. Z tego co widzę (zerknęłam z ciekawości!) to jest tam definicja klasy jako "szablonu obiektu". Olechafm, gdzie znajduje się zapis o tym, że klasa == obiekt smile.gif?


no właśnie tam, w ostatniej linijce definicji klasy na stronie 25 smile.gif

Cytat
Z tego powodu w książce niekiedy obiekt będzie nazywany klasą (class), ponieważ oba pojęcia są synonimami.


Poza tym istnieje wiele mylących konstrukcji typu drugie zdanie wstępu do rozdziału 2:

Cytat
W języku PHP obiekty zawsze są tworzone za pomocą słowa kluczowego class.
baaasmiley.gif

a jak już nie daj boże dotrzesz do przykładu, który bądź co bądź jest dosyć dobry, to np. okazuje się, że autor zapomniał podać w książce listingu kodu dla głównego kontrolera w nim używanego... ktoś tam kiedyś do niego napisał i podane jest repozytorium, z którego to można pobrać, ale okazuje się ono być kodem frameworka, który autor (pełen wiary w swojego skilla) tworzy... przebicie się przez to onieśmiela... potem jest mnóstwo zajebiście niepotrzebnego kodu w postaci jakiejś biblioteki, która rzekomo jest potrzebna później, a na koniec piękny zgon w postaci przykładowej aplikacji napisanej w oparciu o stworzony silnik, oczywiście bez wykorzystania jakiegokolwiek template engine, która wypluwa coś tylko minimalnie bardziej banalnego niż Hello World...

a na koniec zacytuje jeszcze wookieb:

Cytat(wookieb)
O nie, jak widzę takie gówniane kody jak ten, to sam mam ochotę wydać książkę...
plej
To ja już nie wiem którą kupićbiggrin.gif
polecacie jakąś dobrą książkę questionmark.gif
bo jak ja mam czytać książkę w której jest więcej błędów i braków to aż się nie chce uczyćbiggrin.gif
olechafm
niestety ale wyboru nie masz wielkiego, szczególnie w dziale "dopiero zaczynam", zawsze ktoś może Ci polecić czytanie dokumentacji oficjalnej PHP itd. smile.gif

ta książka Hasina Haydera nie jest ideałem, ale na pewno pozwoli Ci zrozumieć MVC (trochę pokaleczone, ale trudno) no i podstawę konstruowania aplikacji w oparciu o strukturę

index.php + .htaccess + router + dispatcher

myślę, więc (o zgrozo) że jest warta tych 37 złotych na helionie pod warunkiem, że po jej przestudiowaniu i przebrnięciu przez przykładową aplikację, zaczniesz to konfrontować z innymi źródłami wiedzy i odnajdziesz oraz zrozumiesz co w niej jest nie tak, w końcu na błędach też można się czegoś nauczyć...
plej
spoko:)
no ja chce tylko zrozumieć obiektowe i wtedy będę na necie też czytał artykuły itd.. i próbował pisać jakieś stronki tak sobie he.
LSM
Myślę że ta kniga "PHP5 zaawansowane programowanie" jest przydatna mimo tych paru uchybień. Ja dzięki niej zrozumiałem sporo oszczędzając sobie czytania niezliczonych ilości stron www. Fakt - teraz patrze na nią trochę inaczej niż na początku i fakt to "zaawansowane programowanie" w tytule jest troche przesadą. Ale na początek książka jest w sam raz. Po jakimś czasie sam ocenisz rozwiązania autorów. Moje zdanie: warto ją kupić.
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.