具有可变长度参数列表的函数

时间:2011-09-29 10:59:15

标签: php function

如果我有以下功能:

function foo($a = 'a', $b = 'b', $c = 'c', $d = 'd')
{
    // Do something
}

我可以调用此函数并仅传递$ d的值,因此将所有其他参数保留为默认值吗?代码如下:

foo('bar');

或者我必须用这样的东西来打电话:

foo(null, null, null, 'bar');

6 个答案:

答案 0 :(得分:1)

你必须像你说的那样使用空值:

foo(null, null, null, 'bar');

如果你不介意创造更多功能,你可以做这样的事情,我想整体代码会更整洁。

function update_d($val){
    foo(null, null, null, $val);
}

或者你可以像这样使用数组:

$args = array($a = 'a', $b = 'b', $c = 'c', $d = 'd');
foo($args);

答案 1 :(得分:1)

不,你不能。使用数组:

function foo($args) {
   extract($args);
   echo $bar + $baz;
}

foo(array("bar" => 123, "baz" => 456));

在php.net上写一个错误报告,并要求他们为该语言添加命名参数!

答案 2 :(得分:0)

你必须这样做

foo(null, null, null, 'bar');

另一种方法是将参数保留在函数签名之外,并使用func_get_args()来检索值;

function foo() {
    $args = func_get_args();

但是,如果你遗漏前三个null值,那么就无法知道'bar'是$d参数。请注意,这种方法在大多数情况下都是不受欢迎的,因为它会混淆您的功能签名并损害性能。

答案 3 :(得分:0)

简答:不。 答案很长:Nooooooooooooooooooooooooooooo。

当根本没有设置变量时,将使用默认参数值。

答案 4 :(得分:0)

如果没有overloading技术,你就无法做到。

在这种情况下,你的程序假定如果只传递一个参数,则它是第四个。

答案 5 :(得分:-1)

func_get_args() - 获取函数参数列表的数组 func_num_args() - 返回传递给函数的参数数量

function foo()
{
     $numargs = func_num_args();
     echo "Number of arguments: $numargs<br />\n";
}


foo(a); foo(1,b,c); will work fine