Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Interfejs] metody abstrakcyjne
Forum PHP.pl > Forum > PHP > Object-oriented programming
Reigon
Ostatnio wglebiam sie w tajniki OOP w PHP5, mam ambitny cel napisac aplikacje implementujaca wzorzec MVC i mam na to 2 miesiace. Mam nadzieje, ze mi sie uda ;p W kazdym badz razie korzystam z ksiazki "PHP 5 Zaawansowane programowanie" i materialow tu i tam znalezionych w sieci. Postanowilem sobie przerobic srednio-zaawansowany przykladzik z rozdzialu 3, no i napotkalem na taki problem:

W ksiazce jest interfejs:
  1. <?php
  2.  interface Validator {
  3.  abstract function validate();
  4.  }
  5. ?>


Czy w interfejsach powinno sie w ogole definiowac metody abstrakcyjne ? Przeciez one same w sobie takie moga byc pozniej juz w implementacji danej klasy - jezeli zadeklarujemy klase jako abstract.

I dalej w ksiazce jest klasa PropertyObject abstrakcyjna, bo nie ma zaimplementowanej funkcji validate, a np. klasa Entity dziedziczaca po PropertyObject juz nie jest abstrakcyjna (mimo, ze w implementacji metody validate() jest tylko komentarz - czy sprawia on, ze dzieki temu komentarzowi jest juz implementacja tongue.gif ? ).

Dziwna sprawa, w kazdym badz razie to nie dziala i wywala:

Fatal error: Access type for interface method Validator::validate() must be omitted in ....

Jak zamienilem abstract na public, to smiga... Blad w ksiazce, czy ja zle mysle ?
Turgon
Błąd w książce się wkradł. Kolego manual nie gryzie smile.gif
Z resztą implementacja znaczy :
  1. <?php
  2. public function validate(){
  3. }
  4. ?>

Tyle wystarczy. Ale musi być taka sama jak w interfejsie lub abstrakcyjnej klasie. Pamiętaj o tym.
Reigon
W manualu nie znalazlem podobnego problemu. Dzieki w utwierdzeniu mnie w moim przekonaniu...i jak tu sie uczyc z takich ksiazek ;p
Jarod
@Reigon: ta książka ma w p.... błędów i jeszcze trochę. Sam przez to przechodziłem. Poz atym jak ją przerobisz i będziesz szukał na tym forum i innych stronach odpowiedzi na nurtujące Cię pytania zauważysz, że przykłady w tej książce nie są trafione. Przynajmniej moje takie zdanie. Ale nie żałuje że przeczytałem.
Turgon
Wcale nie... Książka ta bardzo pomaga zrozumieć wiele rzeczy. Dzięki niej załapałem o co chodzi z MVC tongue.gif Przykłady są trudne i odmienne smile.gif
Jarod
Cytat(Turgon @ 14.03.2007, 15:28:04 ) *
Wcale nie... Książka ta bardzo pomaga zrozumieć wiele rzeczy. Dzięki niej załapałem o co chodzi z MVC tongue.gif Przykłady są trudne i odmienne smile.gif

Każdy może mieć inne zdanie. Jeśli chodzi o rozdział o MVC to totalna kicha.
Reigon
Jezeli chodzi o MVC, to bardzo pobieznie, oczywiscie mozna zrozumiec ten wzorzec, ale tam jest to zaprezentowane czysto teoretycznie - tak czy inaczej przyda sie do pracy, chociazby jako podpora teorii.

W dalszej czesci ksiazki znowu widzialem abstrakcyjna deklaracje metody w interfejsie...wiec moze jednak ten kod, co podalem w pierwszym poscie jest dobry, a blad wynika z czegos innego ? Tylko nie wiem z czego....bo w reszcie klas (implementujacej ten interfejs) jest albo definicja tej metody albo chociaz deklaracja (no bo musi byc - a moze nie musi...bo jest abstract w interfejsie). Interpreter doczepil sie konkretnie tej linijki, gdzie bylo abstract dla metody w interfejsie - po zmianie na public - ok.
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.