Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Interfejsy[Wątpliwości]
daniel1302
post 23.02.2008, 15:31:58
Post #1





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


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?
Go to the top of the page
+Quote Post
qrees
post 23.02.2008, 15:41:29
Post #2





Grupa: Zarejestrowani
Postów: 275
Pomógł: 44
Dołączył: 23.11.2007

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


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.
Go to the top of the page
+Quote Post
daniel1302
post 23.02.2008, 15:44:59
Post #3





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


Więc jakie zadanie mają interfejsy, po co ich używać (określać jakie metody są wymagane)?
Go to the top of the page
+Quote Post
Cysiaczek
post 23.02.2008, 15:45:42
Post #4





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




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


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
daniel1302
post 23.02.2008, 15:49:41
Post #5





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


Jak zaimpletuje to sprawdzi, czy ta metoda jest w obiekcie, jeśli niema to zwroci error, czy to jest ich zadanie?
Go to the top of the page
+Quote Post
Cysiaczek
post 23.02.2008, 15:51:18
Post #6





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




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


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
daniel1302
post 23.02.2008, 15:59:38
Post #7





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


i co zrobi ten fragmęt
  1. <?php
  2. (Courtesy $member)
  3. ?>
Go to the top of the page
+Quote Post
Cysiaczek
post 23.02.2008, 16:06:02
Post #8





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Manual!!!
http://php.net.pl/manual/pl/language.oop5.typehinting.php


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
daniel1302
post 23.02.2008, 19:01:02
Post #9





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


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ą
Go to the top of the page
+Quote Post
smialy
post 23.02.2008, 19:22:00
Post #10





Grupa: Zarejestrowani
Postów: 60
Pomógł: 4
Dołączył: 23.05.2007
Skąd: Łódź

Ostrzeżenie: (10%)
X----


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

Ten post edytował smialy 23.02.2008, 19:24:53


--------------------
openSuse, Eclipse i Aptana - daje rade
Go to the top of the page
+Quote Post
-=Peter=-
post 23.02.2008, 19:25:02
Post #11





Grupa: Zarejestrowani
Postów: 304
Pomógł: 51
Dołączył: 4.02.2005
Skąd: Kraków

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


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


--------------------
Go to the top of the page
+Quote Post
daniel1302
post 23.02.2008, 19:39:01
Post #12





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


Dziękuje Ci jakoś mi to podeszło twoje tłumaczenie oczywiście wszyscy wypowiadający się(mądrze dostają piwko) Do zamknięcia
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 Wersja Lo-Fi Aktualny czas: 16.06.2025 - 21:49