Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Używanie interfacesu
gcdreak
post
Post #1





Grupa: Zarejestrowani
Postów: 365
Pomógł: 8
Dołączył: 16.12.2008

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


Witam!
Czy może mi ktoś wyjaśnić po co w poniższym kodzie jest użyty interface i jakie korzyści nam daje?(jakieś przykłady?).
Kod pochodzi ze strony: http://pl.wikibooks.org/wiki/PHP/Autoryzacja_i_logowanie
Wygląda tak:
Kod
interface storage {
    public function login($name, $pass);//1
}

Jest tam niby wyjaśnienie, ale nic mi ono nie mówi i kompletnie nie mogę dopasować do tego żadnego przykładu.
Przeglądnąłem już kilka stron i szukałem informacji w googlach nt tworzenia interfaców (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Proszę o wyjaśnienie
Go to the top of the page
+Quote Post
piotrooo89
post
Post #2


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




interfejsy pomagają nadac standardy metodą wykonującym określone zadania. chodzi o to aby wszystkie wykonywały się metodami o tej samej nazwie.
Go to the top of the page
+Quote Post
marcio
post
Post #3





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


Cytat
  1. Tworzymy interfejs, który należy zaimplementować aby stworzyć sterownik przechowywania danych
  2. Ta klasa to sterownik przechowywania danych w bazie danych MySQL
  3. Funkcja pobiera dane ze źródła przechowywania(czyli w tym wypadku bazy danych), i zwraca je, jeśli nie ma użytkownika to zwraca false.

Czytales to??

Interfejs przydaje sie wtedy kiedy musisz napisac kilka sposobow sprawdzania user'a(chodzi o ten przyklad z linku ktory podales) przyda sie to wtedy gdybys klase z przykladu ktora podales musial zaimplementowac tak zeby dzialala i na plikach *.txt,MySql,Orcalce i kij wie co jeszcze wtedy robisz kilka klad ktore "dziedzicza" metody z interfejsow i w odpowiedniej klasie implementujesz metody w odpowiedni sposob.

W przykladzie wyzej w klasie mysqlStorage masz implementacje interfejsu Storage tak by dzialal na bazie mysql mozesz zrobic np klase FileStorage ktora bedzie implemetowac interfejs Storage a metode w tej klasie tak napiszesz by pobierala i sprawdzala user'a z pliku *.txt.

Rozumiesz?
Go to the top of the page
+Quote Post
gcdreak
post
Post #4





Grupa: Zarejestrowani
Postów: 365
Pomógł: 8
Dołączył: 16.12.2008

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


A jeśli bym jej nie napisał to nie będzie to błędem(złym zwyczajem)?
Go to the top of the page
+Quote Post
piotrooo89
post
Post #5


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




to zależy od zaawansowania klasy, uzywania metod/obiektów. wszystko sprowadza sie do tego czy to wykorzystasz u siebie, choć na pewno jest to dobry nawyk.
Go to the top of the page
+Quote Post
marcio
post
Post #6





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


Cytat
A jeśli bym jej nie napisał to nie będzie to błędem(złym zwyczajem)?

Ale czegu bys nie napisal bo sie juz pogubilem o co ci chodzi.

Chodzi o to gdybys nie uzywal interfejsow??

Poprostu Kod jest czytelniejszy, Pozwala na pseudo wielodziedziczenie i w pewnym sensie pozwala rozszerzac klase o pewna funkcjonalnosc nie zawsze mozna stosowAC dziedziczenie.

I oczywiscie latwiej sie potem w takim kodzie doczytac niz szukac 5 klas bazowych (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
gcdreak
post
Post #7





Grupa: Zarejestrowani
Postów: 365
Pomógł: 8
Dołączył: 16.12.2008

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


Cytat(marcio @ 6.05.2009, 20:14:13 ) *
I oczywiscie latwiej sie potem w takim kodzie doczytac niz szukac 5 klas bazowych (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)


A możesz mi to jakoś dokładniej wyjaśnić? Przepraszam, że trochę marudze ale zależy mi żeby zrozumieć interfacy, ale jakoś tego pojąć nie mogę i dlatego tak pytam
Go to the top of the page
+Quote Post
marcio
post
Post #8





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


Chodzby w tym przykladzie co podales zamiast robic tyle klas ile ci jest potrzebnych opcji do wyciagania danych i potem robic jedna klase ktora mialaby dziedziczyc dla wszystkich opcji Mysql,Oracle,*.txt to robisz klasy ktore implementuja interfejs i potem przekazujesz obiekt klasy ktora ci jest potrzebna do glownej klasy nie robiac burdelu w kodzie.

Jak mialbym patrzec na wszystkie klasy pochodne to by mnie szlak trafil tak patrze na interfejs i implementuje go.
Go to the top of the page
+Quote Post
gcdreak
post
Post #9





Grupa: Zarejestrowani
Postów: 365
Pomógł: 8
Dołączył: 16.12.2008

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


A możesz mi pokazać jakiś łatwy przykład? Coś zaczynam rozumieć, ale jeśli mógłbyś zrobić to o co proszę to napewno będzie mi łatwiej?
Go to the top of the page
+Quote Post
marcio
post
Post #10





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


tu masz odpowiedz i kod na twoje pytanie napewno kod nie jest super w 100% bo pionerem w PHP nie jestem ale moze rozjasni ci idee.
Go to the top of the page
+Quote Post
gcdreak
post
Post #11





Grupa: Zarejestrowani
Postów: 365
Pomógł: 8
Dołączył: 16.12.2008

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


Dzięki,
ten przykład jest bardzo dobry.
Ostatnio (dzwinym zbiegiem okoliczności (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ) trafiiłem na ten kod
Go to the top of the page
+Quote Post
Zyx
post
Post #12





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


Od strony technicznej interfejs to sztuczny twór - jest to informacja dla programisty oraz interpretera, jaką funkcjonalność musi implementować pewna klasa, aby mogła być używana do określonego zadania. Weźmy na przykład tę autoryzację z Wikibooks - różne aplikacje mogą wspierać przechowywanie danych w różnych miejscach - w bazie danych, w plikach tekstowych, z ustawień systemu operacyjnego... system logowania dzięki interfejsowi może powiedzieć: jeśli chcesz dodać nowy mechanizm autoryzacji, musisz w swojej klasie zaimplementować następujące metody, gdyż ja za ich pomocą będę się z tym mechanizmem komunikować. A dzięki temu, że interfejs jest elementem języka oraz trzeba w takiej klasie zadeklarować implements mojInterfejs, system logowania ma możliwość sprawdzenia, że faktycznie dostał obiekt mechanizmu autoryzacji, z którego potrafi korzystać.

W językach ze statycznymi typami zmiennej idzie się jeszcze dalej - możesz stworzyć zmienną, której typem jest interfejs i podstawić pod nią każdy obiekt, który ten interfejs implementuje. Z poziomu tej zmiennej możesz jednak wywoływać jedynie metody, które zdefiniowane są w interfejsie, co jeszcze bardziej poprawia przejrzystość kodu i utrudnia jego przypadkowe rozwalenie.
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #13





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Witam

Pisze w php4 od zawsze, o roznicy w obiektach miedzy php4 a php5 tylko czytalem nigdy ich nie stosujac.

Czym różni się interface od zwyklej listy funkcji i wywolań w komentarzu na samej górze pliku z biblioteką? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Slowem, po co to, IMO podstawowa dyscyplina programisty wystarczy.
Go to the top of the page
+Quote Post
Zyx
post
Post #14





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


Np. tym, że komentarzem nie zrobisz czegoś takiego:

Kod
foreach($listaObiektow as $obiekt)
{
   if($obiekt instanceof mojInterfejs)
   {
      $obiekt->metodaZTegoInterfejsu();
   }
   elseif($obiekt instanceof innyInterfejs)
   {
      $obiekt->metodaZInnegoInterfejsu();
   }
}


Najwyższa pora na przesiadkę (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .
Go to the top of the page
+Quote Post

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: 23.08.2025 - 00:34