Closure vs. Callable as input parameter type

Ако подаваш стринг като входен параметър на метод/функция, който стринг е име на 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!

Литература:

https://stackoverflow.com/questions/29730720/php-type-hinting-difference-between-closure-and-callable

Вашият коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *