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%)
-----


Na to pytanie można odpowiedzieć sobie samemu (IMG:style_emoticons/default/smile.gif) Jeżeli klasa "A" to klasa podstawowa, implementuje ona Interfejs "I" to klasa "B" dziedzicząca od "A" ma to wszystko co "A" prawda? (IMG:style_emoticons/default/smile.gif) Więc - TAK ma od razu zaimplementowany Interfejs (IMG:style_emoticons/default/wink.gif)

Co do klas abstrakcyjnych to prosty przykład:

  1. abstract class moja_klasa_abstrakcyjna
  2. {
  3. // metody, które muszą zostać zaimplementowane w klasie dziedziczącej (jak w interfejsie)
  4.  
  5. abstract public function metoda_1() {}
  6. abstract protected function metoda_2() {}
  7.  
  8. // metody, które mogą zostać odziedziczone (ich nadpisywanie nie jest wymagane)
  9. protected function metoda_3()
  10. {
  11. echo 'tralala';
  12. }
  13. }
  14.  
  15. // Samego interfejsu nie da się powołać do życia a czy klasę abstrakcyjną się da?
  16.  
  17. $test = new moja_klasa_abstrakcyjna; // NIE - wywali to błąd - klasa abstrakcyjna nie może mieć instancji...
  18.  


Po klasie abstrakcyjnej można jedynie dziedziczyć - w pewnym sensie działa ona jak interfejs bo wymusza zaimplementowanie w pochodnej klasie metod oznaczonych jako "abstract" ale pozwala ona także na deklaracje zwykłych metod i własności, które można normalnie dziedziczyć (IMG:style_emoticons/default/wink.gif)

Istnieje możliwość zablokowania zmiany metody w klasach pochodnych poprzez dodanie przed nimi "final" - tak samo jeśli da się to przed deklaracją samej klasy - nie można z niej dziedziczyć (IMG:style_emoticons/default/wink.gif)
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: 29.12.2025 - 12:51