5

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

考虑这样一个函数:

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

请指教。

4

7 回答 7

5

我宁愿使用数组作为参数,并在函数内部检查它以查看您的变量是否存在:

function abc ($data) {

    if(isset($data['x']){
       //whatever
    }

    if(isset($data['y']){
       //whatever
    }

    ...
}
于 2013-03-27T15:33:12.057 回答
1

看看func_get_args()func_get_arg()func_num_args()

当然,当您使用这些时,您无法仅通过调用来获得“第一个”和“第三个”参数abc($x, $l)。你必须打电话abc($x, null, $l)

于 2013-03-27T15:34:51.460 回答
1

我最近需要一个函数来动态调用其他函数,并试图做一些最优雅和易于维护的东西。也许这种方法对于那些需要将不同数量的参数传递给同一个函数寻找如何使用一种方法来调用所需的任何函数的人很有用。

$return = call_user_func_array($function_name, $parameters);

在我的例子中,我传递了一个 Web 服务中可用的函数,并$parameters为每个函数所需的参数提供数组。

https://secure.php.net/manual/en/function.call-user-func-array.php

于 2019-12-11T17:13:42.573 回答
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]))
}
于 2013-03-27T15:37:09.797 回答
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);
于 2013-03-27T15:35:32.700 回答
0

我想不出您的解决方案的任何确切替代方案...要么您必须将 null 传递给您不想发送的参数,例如abc (null, $y, null, $m)

或者正在考虑的是使用 call_user_func_array 之类的东西

 $params = array('','y','','m');
 call_user_func_array('abc', $params);
于 2013-03-27T15:45:33.090 回答
0
function 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) 参数

于 2013-03-27T15:45:41.030 回答