php - 传递给函数的动态变量量

时间:2013-03-27 15:32:09

标签: php function variables

我正在寻找最优雅的方法来传递可变数量的参数来传递函数。

考虑这样一个功能:

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

请建议。

7 个答案:

答案 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