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

时间:2019-07-05 12:10:58

标签: 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");
    });
}

这会导致语法错误并显示消息

  

“不允许将表达式作为参数默认值”。

1 个答案:

答案 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参数