![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 651 Pomógł: 28 Dołączył: 4.12.2004 Ostrzeżenie: (0%) ![]() ![]() |
hej, próbuję okiełznać częściowo php5
![]() Czy da się w jakiś sposób implementować interfejs w danej klasie, ale tak, aby w tej klasie były wymagane tylko konkretne metody, które zawiera interfejs i żeby nie była wymuszana konkretna ilość argumentów dla tych metod? Wiadomo, że interfejsy wymagają utworzenia w klasie konkretnych metod z konkretną ilością parametrów. Ja chciałbym natomiast mieć taki interfejs, który będzie wymagał tylko tego, żeby w klasie znajdowały się metody o konkretnych nazwach, ale w różnych implementacjach będą one miały różną liczbę argumentów. Da się coś takiego zrobić? Po prostu mam kilka klas, które mają takie same schematy nazewnictwa metod, ale czasami w niektórych metodach jest potrzeba podania większej ilości argumentów niż w innych klasach. Można to oczywiście uwzględnić w interfejsie i dodać parametry do wszystkich metod, ale wtedy te dodane parametry będą w niektórych miejscach w ogóle niewykorzystywane... -------------------- Sygnatura niezgodna z regulaminem.
|
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 470 Pomógł: 75 Dołączył: 21.09.2005 Skąd: że znowu Ostrzeżenie: (0%) ![]() ![]() |
func_get_args" title="Zobacz w manualu php" target="_manual, func_num_args" title="Zobacz w manualu php" target="_manual i po problemie, php nie zmusza cie do ustalania konkretnej liczby argumentów, umozliwia tylko ustawienie minimalnej liczby wymaganych argumentów
-------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 338 Pomógł: 2 Dołączył: 4.03.2006 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Ale to zaczyna klucic sie z interfejsami.
Interfejsow uzywasz, zeby wymusic na uzytkowniku uzycie klasy w konkretny, ustalony sposob. Zalozmy, ze masz klase Konfiguracja:
Klase ta dajesz uzytkownikom, bo jest wygodna, szybka i... wygodna ![]() Okazuje sie, ze do pewnej czesci aplikacji nalezy przekazac obiekt tej klasy. Obiekt z kolei tworzony jest nie przez aplikacje, ale przez uzytkownika. Pan Kazio okazal sie madrzejszy - zrobil tez klase Konfiguracja, ale metoda load przyjmuje obiekt bazy danych, bo konfiguracje Kazio bedzie pobieral z bazy. W tej chwili pan KAzio przekazuje obiekt konfiguracji do aplikackji, ale z inna metoda load! Jezeli nagle aplikacja zechce wczytac jakis konfig do Konfiguracji, to poda mu plik (bo niby skad ma wiedziec, ze madry Kazio woli baze?). Dlatego interfejsy okreslaja, jak wyglada klasa i zapewniaja, ze bedzie jej mozna uzyc w sposob prawidlowy. Troche mnie dziwi pomysl tworzenia 'uniwersalnego' interfejsu dla np. 14 klas, bo sa podobne - utworz 14 interfejsow, albo jak wspomnial kolega - uzywaj func_get_args(), ale nie wiem, czy to najlepszy pomysl. Pozdrawiam, Adrian. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 651 Pomógł: 28 Dołączył: 4.12.2004 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za odpowiedzi.
Chyba jednak zdecyduję się na zrobienie większej ilości interfejsów dla paru wyjątkowych klas. Po prostu wydaje mi się, że interfejsy służą także do ujednolicenia budowy kilku klas ![]() W każdym razie mogę Wam przedstawić mój konkretny przykład. Mam sobie taką klasę
I mam jeszcze kilka innych klas o takiej samej budowie, tylko że mają obsługiwać one inne dane. Niektóre z nich posiadają jakieś dodatkowe metody, ale wszystkie z nich muszą posiadać te, co ta klasa napisana powyżej. Tylko akurat jedna z klas nie potrzebuje żadnego parametru przy metodzie getAll(), więc dla niej i tej podobnych klas zrobię oddzielny interfejs. -------------------- Sygnatura niezgodna z regulaminem.
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 338 Pomógł: 2 Dołączył: 4.03.2006 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
O widze MVC
![]() Ktos kiedys mądrze zauważym na naszym forum, ze model nie powinien implementowac czegokolwiek. Pozniej padlo zdanie, ze model to chyba najtrudniejsza czesc MVC. Zgadzam sie z pierwszym stwierdzeniem. Dlaczego? Bo tylko ty wiesz jak uzywac modelu, nie aplikacja. Dwa modele (np GaleriaZdjec i Nowosci) moga byc tak rozne i zawierac tak rozne metody, ze interfejs jest tu absolutnie niepotrzebny. Co innego taka sytuacja:
Masz dwa takie same modele, ale operujace na roznych zrodlach danych. Wtedy moznaby uzyc interfejsu, ale ja pozostaje przy stwierdzeniu, ze nadal nie ma to sensu ![]() RADA: model nie implementuje niczego. RADA2: mozesz dla ulatwienia dziedziczcy po jakims prostym modelu otwierajacym Ci dostep do zrodla danych:
Pozdrawiam, Adrian. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 651 Pomógł: 28 Dołączył: 4.12.2004 Ostrzeżenie: (0%) ![]() ![]() |
Odnośnie `RADY2`, to takie coś już zrealizowałem
![]() ![]() Wracając do interfejsów, to wydaje mi się rozsądnym ustawienie jednego interfejsu dla akurat tych klas, które mam, a parametry do metod planuję przesyłać jako tablicę (wtedy będzie we wszystkich metodach taka sama ilość parametrów i będą one kompatybilne z interfejsem). W tych klasach właściwie wszędzie są tylko operacje na danych i w niektórych miejscach tylko takie rzeczy jak przesyłanie/usuwanie plików. Ten przykład z postgresem i mysql-em jest dobry, bo chyba właśnie o to chodzi w interfejsach ![]() ![]() -------------------- Sygnatura niezgodna z regulaminem.
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 338 Pomógł: 2 Dołączył: 4.03.2006 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Model nie powiniem implementowac interfejsu. Powiedz,. czy chociaz raz skorzystasz z faktu, ze model ma interfejs?
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 1 566 Pomógł: 37 Dołączył: 14.05.2003 Skąd: Kraków ![]() |
hm.. Narzucenie metody, która musi być wykonana ?
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 651 Pomógł: 28 Dołączył: 4.12.2004 Ostrzeżenie: (0%) ![]() ![]() |
Moim głównym zamierzeniem w tym przypadku jest to, o czym wspomniał przedmówca, tylko sprecyzuję: metoda nie wykonana, lecz zawarta w danej klasie
![]() -------------------- Sygnatura niezgodna z regulaminem.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 10:51 |