Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Interface - pytanie
Micchaleq
post
Post #1





Grupa: Zarejestrowani
Postów: 186
Pomógł: 4
Dołączył: 13.10.2009

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


Witam serdecznie,

W ostatnim czasie czytam książkę o PHP aby poukładać sobie odpowiednio informacji, aż tu nagle okazało się że są tu jeszcze inferfejsy ...

Najgorsze jednak jest to, że nie bardzo to rozumiem.

Tzn wiem, ze interface przechowuje jedynie funkcje metody ( bez żadnych instrukcji )

i teraz chciałem zapytać w jakim celu są stosowane

czy dobrze rozumiem ,że deklarując klasę która implementuje interfejs musi posiadać metody które zawiera interface?

Jeżeli tak, to czy klasy dziedziczące po klasie implementujacej dany interfejs musi posiadać również te metody czy nie?

Ten post edytował Micchaleq 21.11.2011, 09:36:23
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Sephirus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Interfejs to nic innego jak wytyczne do utworzenia klasy zgodnej z jakimś wzorcem, bądź mogącej zostać użytej w jakimś kontekście.

Tak jak pisałeś interfejs to deklaracja metod, które MUSZĄ być zaimplementowane w klasie. Przykładem może być na przykład coś takiego:

  1. class niby_tablica
  2. {
  3. public $tablica;
  4. }



Aby policzyć teraz ile elementów ma niby_tablica::$tablica należało by napisać tak:

  1.  
  2. $nt = new niby_tablica;
  3.  
  4. echo count($nt->tablica);



Ale łatwiej było by napisać:

  1.  
  2. $nt = new niby_tablica;
  3.  
  4. echo count($nt);
  5.  


Tyle, że to nie zwróci nam tak naprawdę wielkości zmiennej $tablica. Możemy zaimplementować Interfejs Countable, który ma raptem jedną metodę count()

  1.  
  2. class niby_tablica implements Countable
  3. {
  4. public $tablica;
  5.  
  6. public function count()
  7. {
  8. return count($this->tablica);
  9. }
  10. }
  11.  
  12. $nt = new niby_tablica;
  13.  
  14. echo count($nt);



Teraz wyświetli to autentyczną liczbę elementów tablicy $tablica. Ale... czy zadziałało by to bez "implements Countable"? Po prostu samo dodanie metody count() czy da taki sam efekt? - Odpowiedź jest prosta - NIE - dlaczego? Bo php'owa funkcja count sprawdza czy ma do czynienia z obiektem i jeśli tak to sprawdza czy implementuje on interfejs Countable i jeśli tak to używa jego funkcji count() - bo ma pewność, że ów obiekt taką posiada - wymaga to implementacja interfejsu.

Interfejsu służą zatem do deklarowania ogólnych list metod wymaganych przez jakiś obiekt, ale jak widać nie tylko (IMG:style_emoticons/default/tongue.gif)

jeżeli interesujesz się tym dalej - zapoznaj się również z klasą abstrakcyjną (IMG:style_emoticons/default/wink.gif)

Ten post edytował Sephirus 21.11.2011, 09:48:44
Go to the top of the page
+Quote Post

Posty w temacie


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.12.2025 - 17:15