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