Autor | Zpráva | ||
---|---|---|---|
BedyR Profil |
#1 · Zasláno: 27. 4. 2013, 23:10:59
Dobrý,
chtěl jsem se zeptat zda je možné vkládat programově do různých funkcích i různé množství argumentů. pro lepší pochopení mého dotazu předkládám příklad: <?php function func1($arg1=0,$arg2=0,$arg3=0,$arg4=0) { return $arg1+$arg2+$arg3+$arg4; } function func2($arg1=1,$arg2=1,$arg3=0,$arg4=0) { return ($arg1/$arg2)+($arg3*$arg4); } function func3($arg1=0,$arg2=0,$arg3=1,$arg4=1) { return ($arg1*$arg2)+($arg3/$arg4); } function func4($arg1,$arg2,$arg3,$arg4,$arg5) { return (($arg1*$arg2)/$arg5)+($arg3/$arg4); } $pro1 = 100; $pro2 = 5; $pro3 = 10; $pro4 = 2; $pro5 = 7; $prop1 = "pro1,pro2,pro3,pro4"; $prop2 = "pro1,pro3,pro4,pro5"; $prop3 = "pro1,pro2,pro3,pro5"; $prop4 = "pro1,pro2,pro3,pro4,pro5"; for ($x=1;$x<4;$x++) { $naz = "func".$x; // verze s pevným počtem argumentů list($val1,$val2,$val3,$val4) = explode(',',${"prop".$x}); echo $naz(${$val1},${$val2},${$val3},${$val4})."<br>"; //------------------------------------- // verze s variabilním počtem argumentů např. kdyby ve for by byla 5 byla by volána funkce func4 $key = explode(",", ${"prop".$x}); $argc = ""; for($y=0;$y<count($key);$y++) { $argc .= ${$key[$y]}.","; } // pro řetězec hodnot for($y=0;$y<count($key);$y++) { $arg["val".$y] = ${$key[$y]}; } // pro array s hodnotama // ale co vložit mezi závorky do funkce aby byli předány argumenty ? echo $naz()."<br><br>"; } ?> |
||
Tori Profil |
BedyR:
Dají se různé věci, ale co to má vlastně dělat? Řešíte konkrétní zadání, nebo zkoušíte co se všecko dá v PHP napsat? edit: Každopádně variabilní proměnné se tady dají nahradit asoc.polem. Možná se vám hodí func_get_args a call_user_func_array |
||
BedyR Profil |
#3 · Zasláno: 27. 4. 2013, 23:54:39
Tori:
Diky call_user_func_array bylo přesně to co jsem hledal. takže poslední řádek by byl echo call_user_func_array("func".$x, $arg); Potřebují volat různé funkce podle parametrů a do těch funkcí vkládat různé množství parametrů z různých zdrojů. Např. při práci s FPDF. Teď už je to vyřešeno a ještě jednou díky. |
||
Joker Profil |
#4 · Zasláno: 28. 4. 2013, 08:34:26
BedyR:
Ve většině případů je nejjednodušší řešení mít jeden argument typu pole. |
||
Časová prodleva: 11 let
|
0