Plugin Magento2 autour d'une méthode différente entre les paramètres appelables et de fermeture sur param $ procéder

12

J'ai vérifié magento2, il existe deux types de paramètres pouvant être envoyés à

autour de la méthode

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

Maintenant ma question:

  1. Quelle est la différence entre la fermeture et l'appelable?
  2. Pourquoi utiliser nous définissons deux types différents pour le paramètre $ procéder?
  3. À quoi servent ces deux types de paramètres?

Quelqu'un peut-il le décrire en détail

Amit Bera
la source
1
Bonne question! Amit
Rakesh Jesadiya
quelqu'un pourrait-il l'expliquer à nouveau en termes simples? ce sera très utile
aravind

Réponses:

9

Vous avez une réponse ici: https://stackoverflow.com/a/29730810/4629261

La différence est que [ Closure] doit être une fonction anonyme, où [ callable] peut également être une fonction normale.

Vous pouvez voir / tester cela avec l'exemple ci-dessous et vous verrez que vous obtiendrez une erreur pour le premier:

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!

Donc, si vous voulez seulement taper l'indice, utilisez la fonction anonyme: Closureet si vous voulez aussi autoriser les fonctions normales à l'utiliser callablecomme indice.

http://php.net/manual/en/class.closure.php

http://php.net/manual/en/language.types.callable.php

Dans le doc Magento, ils suggèrent d'utiliser [callable]

Avant la liste des arguments de la méthode d'origine, les méthodes autour reçoivent un appelable qui permettra un appel à la méthode suivante dans la chaîne. Lorsque l'appelable est appelé, le plugin suivant ou la fonction observée est appelé.

Lorsque vous encapsulez une méthode qui accepte des arguments, votre plug-in doit également accepter ces arguments et vous devez les transmettre lorsque vous appelez la procédure appelable.

http://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html#defining-a-plugin

Vinz
la source
bon, alors quelle est la meilleure utilisation autour de la méthode pour magento?
Amit Bera
1
J'ai édité ci-dessus, Magento suggère d'utiliser [appelable]
Vinz