У вас есть ответ здесь: https://stackoverflow.com/a/29730810/4629261
Разница в том, что [ 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
качестве подсказки типа.
http://php.net/manual/en/class.closure.php
http://php.net/manual/en/language.types.callable.php
В документе Magento они предлагают использовать [callable]
Перед списком аргументов исходного метода методы вокруг получают вызываемый объект, который позволит вызвать следующий метод в цепочке. Когда вызывается вызываемый, вызывается следующий плагин или наблюдаемая функция.
Когда вы переносите метод, который принимает аргументы, ваш плагин также должен принимать эти аргументы, и вы должны переадресовывать их при вызове процедуры вызова.
http://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html#defining-a-plugin