型ヒント – `Closure` と `Callable` の違い 質問する

型ヒント – `Closure` と `Callable` の違い 質問する

Closure何らかのコールバック関数が実行されることを期待する場合、または のいずれかを型ヒントとして使用できることに気付きましたCallable。例:

function callFunc1(Closure $closure) {
    $closure();
}

function callFunc2(Callable $callback) {
    $callback();
}

$function = function() {
    echo 'Hello, World!';
};

callFunc1($function); // Hello, World!
callFunc2($function); // Hello, World!

質問

ここでの違いは何でしょうか?言い換えれば、いつ使うかClosure、いつ使うかということですCallable またはそれらは同じ目的を果たしますか?

ベストアンサー1

違いは、Closureは無名関数でなければならない。callable通常の関数になることもできます。

以下の例でこれを確認/テストすると、最初の例でエラーが発生することがわかります。

function callFunc1(Closure $closure) {
    $closure();
}

function callFunc2(Callable $callback) {
    $callback();
}

function xy() {
    echo 'Hello, World!';
}

callFunc1("xy"); // Catchable fatal error: Argument 1 passed to callFunc1() must be an instance of Closure, string given
callFunc2("xy"); // Hello, World!

したがって、匿名関数の型ヒントのみが必要な場合は、以下を使用します。また、通常の関数も型ヒントとしてClosure使用できるようにしたい場合は、以下を使用します。callable

おすすめ記事