![]() |
![]() ![]() |
![]() |
![]()
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 |
|
|
![]()
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.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Cytat
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? |
|
|
![]()
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)?
|
|
|
![]()
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.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
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) |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 365 Pomógł: 8 Dołączył: 16.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
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. |
|
|
![]()
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?
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
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.
|
|
|
![]()
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 |
|
|
![]()
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. |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
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. |
|
|
![]()
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) . |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 00:34 |