Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP] interface
plej
post
Post #1





Grupa: Zarejestrowani
Postów: 264
Pomógł: 11
Dołączył: 9.05.2011
Skąd: Gdańsk

Ostrzeżenie: (10%)
X----


  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

Ten post edytował plej 7.06.2011, 09:33:38
Go to the top of the page
+Quote Post
nospor
post
Post #2





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




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


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

"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
plej
post
Post #3





Grupa: Zarejestrowani
Postów: 264
Pomógł: 11
Dołączył: 9.05.2011
Skąd: Gdańsk

Ostrzeżenie: (10%)
X----


ale tak jest w książce haha.gif dokładnie przepisane..
czyli co muszę zrobić? sryy ale jestem zielony w obiektowym jeszcze:D
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




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ą?


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

"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
phpion
post
Post #5





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




W interfejsie zmień:
  1. public function addInstrument();

na:
  1. public function addInstrument(Instrument $instrument);
Go to the top of the page
+Quote Post
Daiquiri
post
Post #6





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




Porównać public function addInstrument(); z interfejsu i public function addInstrument(Instrument $instrument) z klasy implementującej interfejs.
Go to the top of the page
+Quote Post
plej
post
Post #7





Grupa: Zarejestrowani
Postów: 264
Pomógł: 11
Dołączył: 9.05.2011
Skąd: Gdańsk

Ostrzeżenie: (10%)
X----


No to patrz łap screnna:
http://zapodaj.net/upload.html

nie ma tak jak koledzy wyżej napisali... biggrin.gif
Go to the top of the page
+Quote Post
nospor
post
Post #8





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




A co ty mi dajesz? Link do uploadu? Ty mi daj link do zdjęcia a nie do uploadu tongue.gif


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

"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
plej
post
Post #9





Grupa: Zarejestrowani
Postów: 264
Pomógł: 11
Dołączył: 9.05.2011
Skąd: Gdańsk

Ostrzeżenie: (10%)
X----


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

Ten post edytował plej 7.06.2011, 09:43:28
Go to the top of the page
+Quote Post
Daiquiri
post
Post #10





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




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.
Powód edycji: [Daiquiri]:
Go to the top of the page
+Quote Post
plej
post
Post #11





Grupa: Zarejestrowani
Postów: 264
Pomógł: 11
Dołączył: 9.05.2011
Skąd: Gdańsk

Ostrzeżenie: (10%)
X----


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.
Go to the top of the page
+Quote Post
Daiquiri
post
Post #12





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




To zacznij najpierw od teorii. Doczytaj do czego mogą służyć interfejsy, a potem zacznij klepać kod.
Go to the top of the page
+Quote Post
plej
post
Post #13





Grupa: Zarejestrowani
Postów: 264
Pomógł: 11
Dołączył: 9.05.2011
Skąd: Gdańsk

Ostrzeżenie: (10%)
X----


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





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




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.
Go to the top of the page
+Quote Post
plej
post
Post #15





Grupa: Zarejestrowani
Postów: 264
Pomógł: 11
Dołączył: 9.05.2011
Skąd: Gdańsk

Ostrzeżenie: (10%)
X----


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:)
Go to the top of the page
+Quote Post
olechafm
post
Post #16





Grupa: Zarejestrowani
Postów: 125
Pomógł: 2
Dołączył: 8.10.2010
Skąd: Poniemieckie miasto przesiedleńców

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


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

Ten post edytował olechafm 7.06.2011, 10:40:44
Go to the top of the page
+Quote Post
plej
post
Post #17





Grupa: Zarejestrowani
Postów: 264
Pomógł: 11
Dołączył: 9.05.2011
Skąd: Gdańsk

Ostrzeżenie: (10%)
X----


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





Grupa: Zarejestrowani
Postów: 125
Pomógł: 2
Dołączył: 8.10.2010
Skąd: Poniemieckie miasto przesiedleńców

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


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





Grupa: Zarejestrowani
Postów: 264
Pomógł: 11
Dołączył: 9.05.2011
Skąd: Gdańsk

Ostrzeżenie: (10%)
X----


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





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




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?
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 21.08.2025 - 12:49