Tiene una respuesta aquí: https://stackoverflow.com/a/29730810/4629261
La diferencia es que un [ Closure
] debe ser una función anónima, donde [ callable
] también puede ser una función normal.
Puede ver / probar esto con el siguiente ejemplo y verá que obtendrá un error para el primero:
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!
Entonces, si solo desea escribir sugerencia, utilice la función anónima: Closure
y si también desea permitir que las funciones normales se usen callable
como sugerencia de tipo.
http://php.net/manual/en/class.closure.php
http://php.net/manual/en/language.types.callable.php
En el documento de Magento, sugieren usar [invocable]
Antes de la lista de argumentos del método original, los métodos alrededor reciben un llamado que permitirá una llamada al siguiente método en la cadena. Cuando se llama al invocable, se llama al siguiente complemento o la función observada.
Cuando ajusta un método que acepta argumentos, su complemento también debe aceptar esos argumentos y debe reenviarlos cuando invoque el procedimiento invocable.
http://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html#defining-a-plugin