Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Używanie interfacesu
Forum PHP.pl > Forum > Przedszkole
gcdreak
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 winksmiley.jpg
Proszę o wyjaśnienie
piotrooo89
interfejsy pomagają nadac standardy metodą wykonującym określone zadania. chodzi o to aby wszystkie wykonywały się metodami o tej samej nazwie.
marcio
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?
gcdreak
A jeśli bym jej nie napisał to nie będzie to błędem(złym zwyczajem)?
piotrooo89
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.
marcio
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 tongue.gif
gcdreak
Cytat(marcio @ 6.05.2009, 20:14:13 ) *
I oczywiscie latwiej sie potem w takim kodzie doczytac niz szukac 5 klas bazowych 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
marcio
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.
gcdreak
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?
marcio
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.
gcdreak
Dzięki,
ten przykład jest bardzo dobry.
Ostatnio (dzwinym zbiegiem okoliczności winksmiley.jpg) trafiiłem na ten kod
Zyx
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.
wNogachSpisz
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ą? smile.gif

Slowem, po co to, IMO podstawowa dyscyplina programisty wystarczy.
Zyx
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ę smile.gif.
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.