gcdreak
6.05.2009, 18:35:13
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_logowanieWyglą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

Proszę o wyjaśnienie
piotrooo89
6.05.2009, 18:43:52
interfejsy pomagają nadac standardy metodą wykonującym określone zadania. chodzi o to aby wszystkie wykonywały się metodami o tej samej nazwie.
marcio
6.05.2009, 18:48:36
Cytat
- Tworzymy interfejs, który należy zaimplementować aby stworzyć sterownik przechowywania danych
- Ta klasa to sterownik przechowywania danych w bazie danych MySQL
- 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
6.05.2009, 19:07:10
A jeśli bym jej nie napisał to nie będzie to błędem(złym zwyczajem)?
piotrooo89
6.05.2009, 19:08:33
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
6.05.2009, 19:14:13
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
gcdreak
6.05.2009, 19:29:31
Cytat(marcio @ 6.05.2009, 20:14:13 )

I oczywiscie latwiej sie potem w takim kodzie doczytac niz szukac 5 klas bazowych

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
6.05.2009, 19:49:15
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
10.05.2009, 23:16:33
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
10.05.2009, 23:32:59
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
11.05.2009, 23:11:01
Dzięki,
ten przykład jest bardzo dobry.
Ostatnio (dzwinym zbiegiem okoliczności

) trafiiłem na ten kod
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
12.05.2009, 08:04:28
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ą?

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

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