Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Interfejsy[Wątpliwości]
Forum PHP.pl > Forum > PHP
daniel1302
Witam, mam nadzieje, że to forum będzie trwało tyle co PHP, tyle mi już pomogło, że hej. Przejdę do sedna sprawy czyli do interfejsów.
Jak mi wiadomo, że można było dziedziczyć tylko z jednej Klasy(Króla)
ale co mi to da, że wprowadzę interfejs, jeśli i tak w klasach niższych(Mieszczanach) będę musiał powtórzyć kod funkcji?
W królu będe musiał dać funkcje
  1. <?php
  2. function Pierwsza()
  3. {
  4.  return func_num_args();
  5. }
  6. ?>


Jeśli w Mieszczanie będe musiał dać taki sam kod?

Czy dobrze zrozumiałem?
qrees
Bo interfejsy służą do określenia jakie metody musi udostępniać klasa. Zatem trochę bez sensu byłoby określać najpierw jakąś metodą za wymaganą, a potem jej nie implementować. Jak nie potrzebujesz takiego wymagania to nie używaj interfejsów...

Masz dziedziczenie w którym możesz stworzyć sobie główną klasę która zaimplementuje wszystkie domyślne metody, a potem dziedziczyć po niej. W klasach które dziedziczą nie musisz nic implementować, albo implementować to co chcesz.
daniel1302
Więc jakie zadanie mają interfejsy, po co ich używać (określać jakie metody są wymagane)?
Cysiaczek
Implementację można całkowicie przenieść na klasy potomne. Wystarczy bazową oznaczyć jako abstrakcyjną.

  1. <?php
  2. interface Courtesy
  3. {
  4. public function sayGoodMorningTo($person);
  5. }
  6.  
  7.  
  8. abstract class A implements Courtesy
  9. {
  10. }
  11.  
  12. class B extends A
  13. {
  14. public function sayGoodMorningTo($person)
  15. {
  16. print "Good Morning ".$person."!";
  17. }
  18. }
  19.  
  20. $o=new B();
  21. $o->sayGoodMorningTo('daniel1302');
  22. ?>
daniel1302
Jak zaimpletuje to sprawdzi, czy ta metoda jest w obiekcie, jeśli niema to zwroci error, czy to jest ich zadanie?
Cysiaczek
Oj. Zobacz taki przykład:
  1. <?php
  2. interface Courtesy
  3. {
  4. public function sayGoodMorningTo($person);
  5. }
  6.  
  7.  
  8. abstract class Human implements Courtesy
  9. {
  10. }
  11.  
  12. class Man extends Human
  13. {
  14. public function sayGoodMorningTo($person)
  15. {
  16. print "Good Morning ".$person."!";
  17. }
  18. }
  19.  
  20. $o=new Man();
  21. $o->sayGoodMorningTo('daniel1302');
  22.  
  23. class CommunityMambers
  24. {
  25. public function addMember(Courtesy $member)
  26. {
  27.  
  28. }
  29. }
  30. ?>
daniel1302
i co zrobi ten fragmęt
  1. <?php
  2. (Courtesy $member)
  3. ?>
Cysiaczek
Manual!!!
http://php.net.pl/manual/pl/language.oop5.typehinting.php
daniel1302
Już wiem a teraz pytanie główne. Czy interfejsy pełnią głównie rolę zabezpieczającą (pilnująca czy są wszystkie obiekt)?
A jak nie to na chłopski rozum w 1 zdaniu prostym jaką
smialy
Interfesy maja zadanie dostarczyć funkcjonalności. PHP nie ma ścisłego typowania (może ale nie musi) ale w JAVA musisz tego pilnować więc interfesy w tym pomagają. Na podstawie interfesu wiesz odrazu co obiekt robi. Dostając sam interfesj bez reszty programu jesteś w stanie napisać daną klase.
Przydaje się przy wiekszych projektach. W grupowej pracy się przydaje winksmiley.jpg
Z czasem każdy zaczyna widzieć ich przydatność winksmiley.jpg
-=Peter=-
Interfejsy służą do tego, aby wymusić na danej hierarchi klas zdefiniowanie określonych metod. Po to się to stosuje, aby ustalić "protokół", sposób "porozumiewania się", czy też korzystania z tych klas. Załóżmy, że nad projektem pracuje kilku programistów, jeśli zdefiniuje się interfejsy to nie ważne co będzie w klasie implementującej jakiś tam interfejs, bo wiadome że w interfejsie są określone wymagane metody publiczne, z których to korzystamy z danej klasy. Programista wtedy wie, że trzeba dane metody, które służą do korzystania z obiektów danej klasy, zaimplementować, przez co jest zunifikowany dostęp do klas należącej do tej samej gałęzi hierarchi smile.gif

Przeanalizuj przykład Cysiaczka. Można dopisać takie coś:

  1. <?php
  2. class Women extends Human
  3. {
  4. public function sayGoodMorningTo($person)
  5. {
  6. print "Good Morning ".$person."!";
  7. }
  8. }
  9.  
  10. class CommunityMambers
  11. {
  12. protected $member;
  13.  
  14. public function addMember(Courtesy $member)
  15. {
  16.  
  17. }
  18.  
  19.  public function sayGoodMorning($person){
  20. foreach($this->member as m){
  21. print $m->sayGoodMorningTo($person);
  22. }
  23.  }
  24. }
  25. ?>


Dzięki temu zapewniamy to, że klasa "Man" i "Woman" mają metody "sayGoodMorningTo", więc w metodzie CommunityMambers::sayGoodMorning() nie wyskoczy błąd, że dany obiekt nie posiada metody "sayGoodMorningTo".
daniel1302
Dziękuje Ci jakoś mi to podeszło twoje tłumaczenie oczywiście wszyscy wypowiadający się(mądrze dostają piwko) Do zamknięcia
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.