我正在寻找最优雅的方法来传递可变数量的参数来传递函数。
考虑这样一个功能:
function abc ($x, $y, $l, $m) {
...
}
有没有很多" ifs"或变量数组作为一个变量来调用函数:
all ($x, $y, $l, $m) arguments
first three ($x, $y, $l) arguments
first and third ($x, $l) arguments
only second ($y) argument
last two ($l, $m) arguments
请建议。
答案 0 :(得分:5)
我宁愿使用数组作为参数,在函数内部检查它是否存在变量:
function abc ($data) {
if(isset($data['x']){
//whatever
}
if(isset($data['y']){
//whatever
}
...
}
答案 1 :(得分:1)
查看func_get_args()
,func_get_arg()
和func_num_args()
。
当然,当你使用这些时,你无法通过调用abc($x, $l)
获得“第一”和“第三”参数。您必须致电abc($x, null, $l)
。
答案 2 :(得分:0)
您是否想说要检查函数中设置了多少变量? 也许这可以帮助
function abc($a) {
$args = func_num_args();
for($i = 0; $i < $args; $i++) {
print_r(func_get_arg($i));
}
}
abc(1,2,3,4);
答案 3 :(得分:0)
// use **func_get_args** function to grab all arg passed in funcion
function variadic($a,$b) {
$args = func_get_args();
foreach ($args as $arg) {
echo "$arg<br />\n";
}
}
// pass as array
$arg = array('a'=> $a,'a'=> $b)
function variadic($arg)
{
if(isset($arg[a]))
}
答案 4 :(得分:0)
我无法想到你的解决方案的任何确切替代方案......
要么必须将null传递给您不想发送的参数
比如abc (null, $y, null, $m)
或正在考虑的是使用call_user_func_array之类的内容
$params = array('','y','','m');
call_user_func_array('abc', $params);
答案 5 :(得分:0)
函数abc($ x = null,$ y = null,$ l = null,$ m = null){
}
然后你会调用这个函数:
所有($ x,$ y,$ l,$ m)参数
前三个($ x,$ y,$ l)参数
第一个和第三个($ x,null,$ l)参数
只有第二个(null,$ y)参数
最后两个(null,null,$ l,$ m)参数
答案 6 :(得分:0)
我最近需要一个函数来动态调用其他函数,并试图使某些东西最优雅,最易于维护。对于那些需要将不同数量的args传递给同一函数的人,寻找如何使用一种方法来调用所需函数的人,这种方法也许有用。
$return = call_user_func_array($function_name, $parameters);
就我而言,我传递了Web服务中可用的函数,并向$parameters
数组提供了每个函数所需的参数。
https://secure.php.net/manual/en/function.call-user-func-array.php