Você tem uma resposta aqui: https://stackoverflow.com/a/29730810/4629261
A diferença é que um [ Closure
] deve ser uma função anônima, onde [ callable
] também pode ser uma função normal.
Você pode ver / testar isso com o exemplo abaixo e verá que receberá um erro no primeiro:
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!
Portanto, se você deseja apenas digitar dica, use a função anônima: Closure
e se deseja também permitir funções normais, use callable
como dica.
http://php.net/manual/en/class.closure.php
http://php.net/manual/en/language.types.callable.php
No documento do Magento, eles sugerem o uso de [callable]
Antes da lista dos argumentos do método original, os métodos around recebem uma chamada que permitirá uma chamada para o próximo método na cadeia. Quando a chamada é chamada, o próximo plugin ou a função observada é chamada.
Quando você quebra um método que aceita argumentos, seu plug-in também deve aceitar esses argumentos e encaminhá-los quando invocar a continuação que pode ser chamada.
http://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html#defining-a-plugin