Frage

Ich sehe einige widersprüchliche Informationen über das Internet und in Drittanbietermodulen gleichermaßen - ist es eine Anforderung oder Best Practice, zurückzukehren $this Am Ende einer Beobachtermethode?

Z.B:

Mycompany_module_model_observer.php

public function salesOrderSaveAfter($observer){
    //do stuff
    return $this;
}
War es hilfreich?

Lösung

Der Kern immer return $this; Im Kontext von Beobachtermethoden - aber es scheint eigentlich keinen Grund dafür zu geben.

Zurück nachverfolgen dispatchEvent() Sie finden die Hauptmethode, die Beobachtermethoden aufruft (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;
}

Aber zu keinem Zeitpunkt ist der Rückgabewert, der jemals tatsächlich verwendet oder als in einen anderen Beobachter in der Kette übergeben wird.

Vielleicht dachten Magento längerfristig, um es als Mittel zur Aufbewahrung/Übergabe von Daten innerhalb zu verwenden $this Klasseninstanz außerhalb der Verwendung von Sitzungen/Registrierung; oder es hätte Legacy -Code gewesen sein können, der nur hat gesteckt.

Ich kann keinen überzeugenden Grund dafür sehen return $this - Aber das ist es, was wir tun, wenn sie es im Kern tun.

In der Regel halten wir, was auch immer der Kern tut - wir halten uns für die beste Praxis. Mit Ausnahme der schockierenden Rechtschreibfehler :)

Andere Tipps

$ this (Wortspiel beabsichtigt) wird als fließende Schnittstelle bezeichnet. Sie können mehrere Methoden innerhalb eines Objekts aufrufen, ohne sich auf eine definierte Variable zu beziehen.

Es ist nur eine Magento -Konvention, immer zurückzukehren $this Anstatt von void (Nichts) Wenn eine Methode keinen anderen Rückgabewert hat, unabhängig davon, ob sie tatsächlich für eine fließende Schnittstelle überall oder nicht verwendet wird.

Der Vorteil ist, dass Sie nicht darüber nachdenken müssen, ob er nützlich ist oder nicht, und eine überflüssige Fluent -Schnittstelle ist besser als eine fehlende. Auch Magento könnte Verwenden Sie sie für Beobachter, obwohl dies höchst unwahrscheinlich ist.

Einige Jahre später ... :)

Der Kern gibt immer $ dies zurück; Im Kontext von Beobachtermethoden - [...

oder

Es ist nur eine Magento -Konvention, die immer $ dieses anstelle von void (nichts) zurückgibt, wenn eine Methode keinen anderen Rückgabewert hat [...

Nicht wirklich. Ich habe gerade einige Beobachter in 1.9.3.x überprüft und viele geben nichts zurück (void). Es ist also nicht wirklich klar, "was der Kerncode tut";);

Ich habe verwendet $return $this; Auch in meinem Code, aber heute - es wird keine Änderungen im M1 -Code geben - ich würde es lassen. Ich denke - wenn ich andere Code lese - a void Die Methode ist klarer als eine mit einem blind hinzugefügten hinzugefügt return $this, Das wird nie verwendet.


Bearbeiten:

Wenn Sie aoe_scheduler verwenden, können Sie auch a zurückgeben string oder array um es in der Cron -Geschichte anzuzeigen.

enter image description here

Für diese Funktionen können hier keine Dokumente finden ... verwandter Code hier: https://github.com/aoepeople/aoe_scheduler/blob/master/app/code/community/aoe/scheduler/model/spedule.php#l229-l259

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top