Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> problem z parametrami public static
zephyr7
post
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....
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
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




Crozin... na nic fleksja się nie zda, skoro błąd będzie na poziomie samej funkcji wywołanej w refleksji. Skoro będzie ona przyjmowała kilka parametrów, a nie dostanie nawet jednego to co będzie? Nie widziałem by refleksja to obsługiwała poprzez uzupełnienie nie istniejących jakoś (IMG:style_emoticons/default/winksmiley.jpg) Ona też dostaje określoną listę parametrów i musi ona być kompletna. Jedyne co możesz zrobić to za jej pomocą pobrać liczbę argumentów funkcji i uzupełnić brakujące false'ami. Moim zdaniem dobre jest to do jakiegoś systemu kontroli, wbicie w helper czy cuś, ale na szybko można to prosto rozwiązać poprzez wariację na switch czy w pętli na zasadzie:
  1. $args = func_get_args();
  2. if( func_num_args() < 5 ) {
  3. for($i=func_num_args(); $i < 5; $i++) {
  4. $args[$i] = false;
  5. }
  6. } else if( func_num_args() > 5 ) {
  7. $args = array_slice($args, 0, 5);
  8. }


Można też zamiast for użyć choćby
  1. $args = array_merge( $args, array_fill( func_num_args(), 5-func_num_args(), false ));
Cudować można na wiele sposobów (IMG:style_emoticons/default/winksmiley.jpg)

PS: Zapomniałem dodać, że 5 to oczywiście wartość jakaś dowolna, która określa liczbę parametrów funkcji.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.12.2025 - 01:03