Как указать параметр функции по умолчанию, который является функцией в PHP? - PullRequest
2 голосов
/ 05 июля 2019

Мне было интересно, как можно указать значение по умолчанию для параметра, который должен быть функцией?Я попытался сделать это с помощью следующего закрытия функции:

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 Ответ

4 голосов
/ 05 июля 2019

Один из способов сделать это - установить для параметра по умолчанию значение 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 param

...