Ако подаваш стринг като входен параметър на метод/функция, който стринг е име на callback функция, може да го дефинираш като тип callable
function patapan(callable $func_name) { }
И в двата случая може да подаваш като стринг името на функцията, но „The difference is, that a Closure
must be an anonymous function, where callable
also can be a normal function“.
Друга важна разлика е, че Closure е predefined class , a callable
е тип.
The difference is, that a Closure
must be an anonymous function, where callable
also can be a normal function.
You can see/test this with the example below and you will see that you will get an error for the first one:
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!
Литература: