我想知道如何指定参数的默认值,该参数应该是一个函数?我试图通过以下函数关闭来做到这一点:
function foo($func = function(){}) {
$func();
}
function bar() {
$this->foo(); // Default parameter is supposed to be here
$this->foo(function(){
echo("non default func param");
});
}
这会导致语法错误并显示消息
“不允许将表达式作为参数默认值”。
答案 0 :(得分:4)
一种解决方法是将默认参数设置为null
,然后检查该参数是否实际上为空-如果已为空,则定义要使用的“默认”函数。
然后检查参数是否可调用-如果不可调用,请引发异常-否则,请调用函数!
function foo($func = null) {
// If $func is null, use default function
if ($func === null) {
$func = function() {
echo "Default!\n";
};
}
// Verify that whatever parameter was supplied is a valid closure
if (!is_callable($func)) {
throw new Exception('Invalid parameter supplied');
}
// Call the function!
$func();
}
function bar() {
foo(); // Default parameter is supposed to be here
foo(function(){
echo "Non default func param \n";
});
}
bar();
以上输出为
默认!
非默认func参数