Plugin Magento2 intorno al metodo diverso tra i parametri richiamabili e di chiusura su param $ procede


12

Ho controllato magento2, ci sono due tipi di parametri che possono essere inviati

intorno al metodo

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

Ora la mia domanda:

  1. Cosa c'è di diverso tra chiusura e richiamo?
  2. Perché usare definiamo il tipo due tipi diversi per il parametro $ continue?
  3. A cosa servono questi due tipi di parametri?

Qualcuno può descriverlo dettagli


1
Bella domanda! Amit
Rakesh Jesadiya,

qualcuno potrebbe spiegarlo di nuovo in termini semplici? sarà di grande aiuto
arrivo il

Risposte:


9

Hai una risposta qui: https://stackoverflow.com/a/29730810/4629261

La differenza è che un [ Closure] deve essere una funzione anonima, dove [ callable] può anche essere una funzione normale.

Puoi vedere / provare questo con l'esempio qui sotto e vedrai che otterrai un errore per il primo:

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!

Quindi, se vuoi solo digitare un suggerimento, usa la funzione anonima: Closuree se vuoi consentire anche le normali funzioni, usa callablecome un suggerimento sul tipo.

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

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

Nel documento Magento, suggeriscono di usare [callable]

Prima dell'elenco degli argomenti del metodo originale, i metodi around ricevono un callable che consentirà una chiamata al metodo successivo nella catena. Quando viene chiamato il callable, viene chiamato il plug-in successivo o la funzione osservata.

Quando si racchiude un metodo che accetta argomenti, il plug-in deve anche accettare tali argomenti ed è necessario inoltrarli quando si richiama il callable procedi.

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


bene, quindi cosa è meglio usare nel metodo around per magento?
Amit Bera

1
Ho modificato sopra, Magento suggerisce di usare [callable]
Vinz il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.