Magento2-Plugin um Methode, die sich zwischen aufrufbaren und Closure-Parametern für param $ continue unterscheidet

12

Ich habe magento2 überprüft. Es gibt zwei Arten von Parametern, an die gesendet werden kann

um Methode

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

Nun meine Frage:

  1. Was unterscheidet zwischen Schließung und Kündigung?
  2. Warum verwenden wir Typ zwei verschiedene Typen für den Parameter $ continue?
  3. Was nützen diese beiden Parameterparameter?

Kann jemand es Details beschreiben

Amit Bera
quelle
1
Gute Frage! Amit
Rakesh Jesadiya
könnte jemand es noch einmal in einfachen Worten erklären? es wird sehr hilfreich sein
aravind

Antworten:

9

Sie haben hier eine Antwort: https://stackoverflow.com/a/29730810/4629261

Der Unterschied besteht darin, dass ein [ Closure] eine anonyme Funktion sein muss, wobei [ callable] auch eine normale Funktion sein kann.

Sie können dies anhand des folgenden Beispiels sehen / testen und Sie werden sehen, dass Sie beim ersten einen Fehler erhalten:

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!

Wenn Sie also nur eine anonyme Hinweisfunktion eingeben möchten, verwenden Sie: Closureund wenn Sie auch normale Funktionen callableals Typhinweis zulassen möchten .

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

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

Im Magento-Dokument wird empfohlen, [aufrufbar] zu verwenden.

Vor der Liste der Argumente der ursprünglichen Methode erhalten around-Methoden eine aufrufbare Datei, mit der die nächste Methode in der Kette aufgerufen werden kann. Wenn der Callable aufgerufen wird, wird das nächste Plugin oder die beobachtete Funktion aufgerufen.

Wenn Sie eine Methode umbrechen, die Argumente akzeptiert, muss Ihr Plugin diese Argumente ebenfalls akzeptieren und Sie müssen sie weiterleiten, wenn Sie den Aufruf von continue aufrufen.

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

Vinz
quelle
gut, was ist also am besten für die Magento-Methode geeignet?
Amit Bera
1
Ich habe oben bearbeitet, Magento schlägt vor, [callable]
Vinz