Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Parametry metod - przekazywanie
Forum PHP.pl > Forum > PHP > Object-oriented programming
Speedy
Hej.

Wiem, że tego typu tematy już się pojawiały, ale większość z nich jest pozamykanych, a wiele wypowiedzi, które w nich się znajdują mają charakter głównie teoretyczny i chyba nie ma w nich informacji, o którą mi chodzi smile.gif.

Mam następującą sytuację:

Przykładowy adres:

www.strona.com/index.php/modul/metoda/parametr1/parametr2

W tym przypadku jest ładowana klasa modul (jest ona odpowiedzialna za uruchamianie odpowiednich metod, które pobierają dane z modeli). Jest też uruchamiana metoda o nazwie metoda, a jej parametry, to: parametr1 i parametr2.

Dynamiczne załadowanie klasy i uruchomienie metody, to żaden problem. Sprawa dotyczy parametrów metody. W omawianej aplikacji jest zwracana tablica z parametrami aktualnej metody.

Dla powyższego przykładu będzie ona wyglądać następująco:

  1. <?php
  2. $parameters = array('parametr1','parametr2');
  3. ?>


Te parametry muszę wstawić do bieżącej metody. Każda z metod może mieć zmienną liczbę parametrów i różne typy parametrów.

Można nie ruszać tablicy z parametrami i zrobić w następujący sposób:

  1. <?php
  2.  
  3. class modul
  4. {
  5.  
  6. public function metoda($tablica)
  7. {
  8. print $tablica[0];
  9. print $tablica[1];
  10. }
  11.  
  12. }
  13.  
  14. ?>


W takim przypadku w każdym module każda metoda będzie musiała mieć jeden parametr będący tablicą.
Nie bardzo mi się to podoba...
Chciałbym, żeby każda metoda w każdym module mogła mieć dowolną liczbę różnych parametrów.

Widziałem taki numer we frameworku CodeIgniter, ale nie przeglądałem go zbyt dogłębnie (jedynie powierzchownie) i nie wiem, gdzie dokładnie jest zawarty kod, który robi to, o co mi chodzi.
Mam na myśli następujący wpis w user guide do tego frameworka:
http://codeigniter.com/user_guide/general/...html#passinguri

Być może ktoś z Was wie, jak to sensownie rozwiązać lub może nakierować mnie na miejsce w CodeIgniterze, gdzie odbywa się interesujący mnie proces.
Jestem też ciekaw, jakie Wy stosujecie praktyki związane z przekazywaniem parametrów metod.

Pozdrawiam smile.gif.
Ludvik
Ja podpowiem Ci ogólnie.

Zacząłbym od implementacji obiektu kontekstu. Ten obiekt będzie kontenerem parametrów przekazywanych do akcji, za którą odpowiadają u Ciebie chyba metody. Jak teraz logicznie przetłumaczyć dane z URL na parametry? Sensowne jest stworzenie pewnej mapy, która elementowi żądania HTTP przyporządkuje nazwę parametru akcji.

U Ciebie pojawia się problem, gdyż Dispatcher ogranicza swoją rolę do odczytania dwóch pierwszych elementów z URL. Warto by pomyśleć właśnie nad bardziej przyjazną translacją URL na parametry.

Nie podoba mi się zarówno pomysł dynamicznego wywoływania metod jak i reprezentacji akcji przez metody. Zawsze akcja była dla mnie obiektem implementującym wzorzec Command i wydawało mi się to logiczne. Widocznie tak Ci jest wygodniej, ale przez to powstają ogromne klasy, których 80% jest nieużywane podczas żądania.
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.