如何指定PHP中的默认函数参数?

如何指定PHP中的默认函数参数?,php,function,closures,Php,Function,Closures,我想知道如何指定一个参数的默认值,它应该是一个函数?我尝试通过以下函数关闭来完成此操作: function foo($func = function(){}) { $func(); } function bar() { $this->foo(); // Default parameter is supposed to be here $this->foo(function(){ echo("non default func param");

我想知道如何指定一个参数的默认值,它应该是一个函数?我尝试通过以下函数关闭来完成此操作:

function foo($func = function(){}) {
    $func();
}

function bar() {
    $this->foo(); // Default parameter is supposed to be here

    $this->foo(function(){
        echo("non default func param");
    });
}
这将导致消息的语法错误

表达式不允许作为参数默认值


一种方法是将默认参数设置为null,然后检查该参数是否为null——如果为null,则定义一个要使用的默认函数

然后检查参数是否可调用-如果不可调用,则引发异常-否则,调用函数

函数foo$func=null{ //如果$func为空,请使用默认函数 如果$func==null{ $func=函数{ 回显默认值!\n; }; } //验证提供的任何参数都是有效的闭包 如果!是否可以调用$func{ 抛出新异常“提供的参数无效”; } //调用函数! $func; } 功能条{ foo;//默认参数应该在这里 食物功能{ 回显非默认函数参数\n; }; } 酒吧 上述各项的产出将是:

默认! 非默认函数参数

现场演示
为什么不:在foo函数中调用函数..并在函数中返回结果,然后在question@devpro,我很难理解您的回答,如果有任何代码片段,我将不胜感激。至于实际示例,我的OP中的代码片段就是我的实际示例。您不能影响一个空的默认值,然后检查它的做作吗?像函数foo$fn=null{if是可调用的$fn{$fn;}或者{/*这里的默认进程*/}让我们来看看。我也有同样的想法。有一个问题,为什么不使用is_callable来检查$func是否是函数?你的方法有更多的优势吗?这是一个很好的解决方法。非常感谢。遗憾的是,PHP没有内置功能来为高阶函数提供默认函数参数。它可能也可以工作,我没有具体的原因说明为什么我没有使用is_callable-至少在可读性方面这可能更好@哦,很高兴知道有什么不同!如果PHP的版本足够新,我认为您可以编写foo?Closure$func=null,而不是验证参数是否为有效的Closure。@KévinBibollet类型暗示或类型声明是在PHP5中引入的,如下所示。但是抛出异常可能会被捕获,给定的错误类型将导致致命错误,您无法从中恢复。