Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 1 Dołączył: 3.11.2005 Ostrzeżenie: (0%)
|
Próbuję napisać coś na wzór frameworka,
mam funkcję, która wywołuje: $uri[0]::$uri[1](); //np. pages::view(); jak przekazywać dodatkowe parametry? Jeśli mój url wygląda tak: pages/view/1/2 funkcja powinna wywołać: $uri[0]::$uri[1]($uri[2],$uri[3]); jak poradzić sobie ze zmienną liczbą parametrów? Do głowy przychodzi mi tylko coś takiego: $params=""; for ($q=2;$q<count($uri)-1;$q++){ $params.='$uri['.$q.'],'; } //usuwa przecinek.... no comment.... $params=strip_tags(substr($params,0,-1)); eval ('$uri[0]::$uri[1]('.$params.');'); będę wdzięczny za bezlitosną krytykę i pomysły, jak można napisać to po ludzku.... |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D |
Pokombinuj z func_num_args i switch. Skoro jakaś metoda obsługuje ściśle określoną liczbę parametrów maksymalnie, to brakujące musisz ustawić na elementy "neutralne" (czyli albo false, albo 0 ) by wychwycić ich brak. Jak?
Przypuśćmy możesz w funkcji maksymalnie obsłużyć 5 parametrów. Jeśli będzie ich mniejsza ilość - uzupełniasz je poprzez false, jeśli równa - ok, jeśli większa - ignorujesz te powyżej. Jak by to mogło wyglądać? Switch jest tu najważniejszy, ponieważ on modyfikuje tak listę parametrów, by uzupełnić brakujące parametry poprzez false. Zwróć uwagę na brak break aż do case 5. To ważne, ponieważ dla 5 parametrów jedynie nastąpi wyjście ze switcha. A co jeśli jest parametrów mniej, jak choćby 3? Ano tabela $args uzupełni $args[3] (4 parametr) na false i przejdzie do case 4 (dlatego brak break!) i uzupełni $args[4](5 parametr) na false oraz przejdzie do case 5 i dopiero tu wyskoczy ze switcha (IMG:style_emoticons/default/winksmiley.jpg) Defaultem jedynie potraktowałem jeśli masz więcej parametrów, bo wtedy nastąpi obcięcie ich do wymaganych 5 (IMG:style_emoticons/default/smile.gif) Zrobiłem coś więc o charakterze "normalizatora" liczby parametrów. PS: Oczywiście uzycie switch ma sens jedynie dla małej liczby akceptowanych parametrów. Przy dużej można użyć do tego celu jak powyżej -> pętli. |
|
|
|
zephyr7 problem z parametrami public static 27.12.2010, 13:06:10
thek Podziel string po stosowanym rozdzielaczu w adresi... 27.12.2010, 13:12:28
zephyr7 Faktycznie! Baran ze mnie!
Przecież gdzie... 27.12.2010, 13:15:14
Crozin Skorzystaj z ReflectionMethod. Swoją drogą nie pow... 27.12.2010, 13:48:49
zephyr7 No, zagwozdka normalnie...
chciałbym tylko wywoła... 27.12.2010, 14:09:05
Crozin A patrzyłeś w ogóle na mój post? To podpowiem: met... 27.12.2010, 14:59:25
thek Crozin... na nic fleksja się nie zda, skoro błąd b... 27.12.2010, 15:28:00
Crozin CytatSkoro będzie ona przyjmowała kilka parametrów... 27.12.2010, 15:41:27
Athlan Ja tylko się zastanawiam, dlaczego nie użyjecie do... 27.12.2010, 15:46:46
rodia [PHP] pobierz, plaintext function hello()... 27.12.2010, 16:02:00
thek Podejść na rozwiązane tego problemu jest masę. Naj... 27.12.2010, 20:58:03 ![]() ![]() |
|
Aktualny czas: 25.12.2025 - 23:22 |