| 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: 13 let
|
|||
0