可以在php中将函数调用作为参数默认值吗?

时间:2012-07-04 09:57:22

标签: php

在php中,可以这样做:

function foo( $var = "bar" ){
    echo $var;
}

foo();         // output : bar

foo("cheese"); // output : cheese

我试图使用一个函数,如下所示:

function foo( $var = get_defined_vars() ){}

返回了一个解析错误:

Parse error: syntax error, unexpected '(', expecting ')'

显而易见的答案就是像这样传递变量

function foo( $var ){
    // do stuff
}

foo( get_defined_vars() );

然而,该函数是可重载的,可以处理许多参数。

我通常使用像:

这样的功能
foo( $var1, $var2, $var3 ... etc );

但是我需要foo函数上方范围内定义的变量,这意味着我每次都使用foo函数来传递get_defined_vars()

我觉得很烦人每次我想使用这个函数我都要调用get_defined_vars();如下:

foo( get_defined_vars(), $var1, $var2, $var3 ... etc );

那么,请问有人能想出办法吗?

我试过这个,也无济于事:

function foo(){
    $args = func_get_args();
    array_unshift( get_defined_vars() );
    call_user_func_array( "bar", $args );
}

function bar(){
    // do stuff
}

2 个答案:

答案 0 :(得分:2)

不,你不能。与属性一样,只允许使用静态值和数组。即使我不推荐它,因为它使函数调用变得不可预测。

  

默认值必须是常量表达式,而不是(例如)变量,类成员或函数调用。

     

http://php.net/functions.arguments#example-152

答案 1 :(得分:0)

尝试以下几点:

function foo( $var1, $var2, $varForDefinedVars=null ){
  if (is_null($varForDefinedVars)){
     $varForDefinedVars = get_defined_vars();
  }
}