PHP匿名函数作为默认参数?
有没有办法在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(
//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
}