Tornando $ questo dopo osservatore
-
16-10-2019 - |
Domanda
Vedo alcune informazioni contrastanti su internet e in moduli 3rd party allo stesso modo -? Si tratta di un requisito o best practice per $this
ritorno alla fine di un metodo osservatore
per esempio:.
MyCompany_Module_Model_Observer.php
public function salesOrderSaveAfter($observer){
//do stuff
return $this;
}
Soluzione
Il nucleo sempre return $this;
nel contesto di metodi di osservazione -. Ma in realtà non sembra essere un motivo per esso
Tracing indietro attraverso dispatchEvent()
troverete il metodo principale che i metodi di chiamate osservatori (in ./app/Core/Model/App.php
)
protected function _callObserverMethod($object, $method, $observer)
{
if (method_exists($object, $method)) {
$object->$method($observer);
} elseif (Mage::getIsDeveloperMode()) {
Mage::throwException('Method "'.$method.'" is not defined in "'.get_class($object).'"');
}
return $this;
}
Ma in nessun punto è il valore restituito mai effettivamente utilizzato o riferiti a essere passato in un altro osservatore lungo la catena.
Forse Magento stavano pensando più a lungo termine per usarlo come alcuni mezzi per mantenere / passare i dati all'interno di un'istanza della classe $this
al di fuori di usare sessioni / Registro di sistema; o avrebbe potuto essere il codice legacy che ha appena bloccato .
non riesco a vedere un motivo valido per return $this
-. Ma detto questo, se lo fanno nel nucleo, che è quello che facciamo
Come regola generale, qualunque sia il nucleo fa - che riteniamo migliori pratiche. Con l'eccezione degli errori di ortografia scioccante :)
Altri suggerimenti
$ questo (gioco di parole) è chiamato interfaccia fluida. Esso consente di chiamare più metodi all'interno di un oggetto senza dover fare riferimento di nuovo a una variabile definita.
E 'solo una convenzione Magento per tornare sempre $this
invece di void
(niente) se un metodo non ha altro valore di ritorno, a prescindere dalla realtà essere utilizzato per un qualsiasi punto interfaccia fluida oppure no.
Il vantaggio è che non c'è bisogno di pensare se è utile o no, e un'interfaccia fluida superfluo è meglio di uno mancante. Inoltre, Magento potrebbe iniziare a utilizzarli per gli osservatori, anche se questo è altamente improbabile.
Alcuni anni più tardi ...:)
Il nucleo tornare sempre $ this; nel contesto di metodi di osservazione - [...]
o
E 'solo una convenzione Magento per tornare sempre $ questo invece di vuoto (niente) se un metodo non ha altro valore di ritorno [...]
No davvero. Appena controllato alcuni osservatori in 1.9.3.x e molti tornano nulla (void
). Quindi non è davvero chiaro "ciò che fa codice di base";)
Ho usato $return $this;
nel mio codice troppo, ma oggi - non ci saranno cambiamenti nel codice M1 - mi piacerebbe lasciare. Credo che - se leggo il codice altrui - un metodo void
è più chiaro, allora uno con un return $this
aggiunto alla cieca, che non viene mai utilizzato
Modifica
Se si utilizza Aoe_Scheduler si può anche restituire un string
o array
per visualizzarlo nella storia cron.
Non è stata trovata nessuna documentazione per questo le caratteristiche ... relativo codice qui: https://github.com/AOEpeople/Aoe_Scheduler/blob/master/app/code/community/Aoe/Scheduler/Model/Schedule.php#L229 -L259