3

有没有办法在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
}
4

2 回答 2

8

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

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

来自: PHP 手册 / 函数参数 / 默认参数值

怎么样:

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
}
于 2012-10-11T03:34:48.123 回答
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 
} 
于 2012-10-11T03:35:04.050 回答