Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Interfejs] metody abstrakcyjne, Zapis w interfejsie, czy dopiero w klasie ?
Reigon
post
Post #1





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 19.10.2004

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


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 ?

Ten post edytował Reigon 13.03.2007, 21:59:09
Go to the top of the page
+Quote Post
Turgon
post
Post #2





Grupa: Zarejestrowani
Postów: 800
Pomógł: 0
Dołączył: 26.11.2005
Skąd: Nowy Sącz

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


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.


--------------------
Jah Music Is On My Mind !
Go to the top of the page
+Quote Post
Reigon
post
Post #3





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 19.10.2004

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


W manualu nie znalazlem podobnego problemu. Dzieki w utwierdzeniu mnie w moim przekonaniu...i jak tu sie uczyc z takich ksiazek ;p
Go to the top of the page
+Quote Post
Jarod
post
Post #4





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


@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.


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
Turgon
post
Post #5





Grupa: Zarejestrowani
Postów: 800
Pomógł: 0
Dołączył: 26.11.2005
Skąd: Nowy Sącz

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


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


--------------------
Jah Music Is On My Mind !
Go to the top of the page
+Quote Post
Jarod
post
Post #6





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


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.


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
Reigon
post
Post #7





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 19.10.2004

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


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

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: 20.08.2025 - 08:30