PHP匿名函数作为默认参数?

时间:2012-10-11 03:19:35

标签: php arguments anonymous-function

有没有办法在php中执行此操作?

//in a class
public static function myFunc($x = function($arg) { return 42+$arg; }) {
   return $x(8); //return 50 if default func is passed in
}

2 个答案:

答案 0 :(得分:7)

PHP默认函数参数只能是标量或数组类型:

  

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

From: PHP Manual / Function Arguments / Default argument values

怎么样:

public static function myFunc($x = null) {

    if (null === $x) {
        $x = function($arg) { return 42 + $arg; };
    }

    return $x(8); //return 50 if default func is passed in
}

答案 1 :(得分:3)

您可以使用func_num_argsfunc_get_arg

//in a class 
public static function myFunc() { 
    if (func_num_args() >= 1) {
        $x = func_get_arg(0);
    } else {
        $x = function($arg) { return 42+$arg; }
    }
    return $x(8); //return 50 if default func is passed in 
} 

但我同意tradyblix你可以按照

处理数据
//in a class 
public static function myFunc() { 
    if (func_num_args() >= 1) {
        $x = func_get_arg(0);
        $retval = $x(8);
    } else {
        $retval = 42 + 8;
    }
    return $retval; //return 50 if default func is passed in 
}