Complemento Magento2 alrededor del método diferente entre los parámetros invocables y de cierre en param $ continue

12

He comprobado magento2, hay dos tipos de parámetros que se pueden enviar a

método alrededor

  • \Closure $proceed ejemplo aroundSave(\Magento\Catalog\Model\Product $subject, \callable $proceed)
  • \callable $proceed ejemplo aroundSave(\Magento\Catalog\Model\Product $subject, \Closure $proceed)

Ahora mi pregunta:

  1. ¿Qué es diferente entre cierre y llamable?
  2. ¿Por qué usar definimos el tipo dos tipos diferentes para el parámetro $ proceder?
  3. ¿Para qué sirven estos dos tipos de parámetros?

¿Alguien puede describirlo detalles

Amit Bera
fuente
1
¡Buena pregunta! Amit
Rakesh Jesadiya
¿podría alguien explicarlo nuevamente en términos simples? será muy útil
aravind

Respuestas:

9

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: Closurey si también desea permitir que las funciones normales se usen callablecomo 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

Vinz
fuente
bueno, entonces, ¿cuál es el mejor uso en el método de magento?
Amit Bera
1
Edité anteriormente, Magento sugiere usar [invocable]
Vinz