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

PHP匿名函数作为默认参数?,php,arguments,anonymous-function,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 } PHP默认函数参数只能是标量或数组类型: 默认值必须是常量表达式,而不是(例如)变量、类成员或函数调用 那么: public static function myFunc(

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

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
}
您可以使用和

但我同意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 
} 

我可以问一下为什么要这样做吗?我有一个通用实用函数,它将匿名函数作为参数(具体来说,它根据函数执行的特定规则将一组对象转换为一组数组)。我想要一个默认操作。这要求太高了吗=没有。默认参数只能是常量,不能是表达式,也不能是对象。之所以接受这个答案,是因为php手册的链接上写着“默认值必须是常量表达式,而不是(例如)变量、类成员或函数调用。”谢谢。我之前有过类似的东西,我希望它有一个语言特性。Guess not=(我还建议在函数签名中声明
$x
的类型,因为当
$x(8)时,传入字符串将导致错误
发生。我个人会将类型声明为
Closure
,以确保它是一个匿名函数,但是
可调用的
也会工作,并且更灵活(而且更容易出错)。因此
myFunc(Closure$x=null)
myFunc(可调用的$x=null)
,如果您尝试了
myFunc(“test”);
,其中任何一个都会抛出一个可捕获的致命错误,而如果没有声明类型,则抛出一个不可捕获的致命错误。不知道func_num_args和func_get_arg。非常bash。
//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 
}