回答:
コアは常にreturn $this;
オブザーバーメソッドのコンテキストにありますが、実際にはその理由はないようです。
トレースバックするdispatchEvent()
と、オブザーバーメソッドを呼び出すメインメソッドが見つかります(./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;
}
しかし、戻り値がチェーン内の別のオブザーバーに渡されるために実際に使用または参照されることはありません。
おそらく、Magentoは$this
、セッション/レジストリを使用する以外に、クラスインスタンス内でデータを保持/渡すための手段として、それを長期的に使用することを考えていたのでしょう。またはそれだけでいるレガシーコードされている可能性が立ち往生。
説得力のある理由はわかりませんreturn $this
が、それは言われています、もし彼らがコアでそれをするなら、それが私たちのすることです。
原則として、コアが何をしても、ベストプラクティスと見なされます。衝撃的なスペルミスを除いて :)
$ this(意図したしゃれ)は、流れるようなインターフェースと呼ばれます。定義された変数を参照せずに、オブジェクト内の複数のメソッドを呼び出すことができます。
$this
、オブザーバーの流れるようなインターフェイスが本当に役に立たないときに戻ってくる説得力のある理由を探しています。
メソッドが他の戻り値を持たない場合、実際にどこかで流なインターフェースに使用されているかどうかに関係$this
なく、常にvoid
(何も)代わりに(何も)返さないという単なるMagentoの規則です。
利点は、それが有用かどうかを考える必要がなく、余分な流interfaceなインターフェースが欠落しているインターフェースよりも優れていることです。また、Magento は、これはほとんどあり得ないことですが、オブザーバーにそれらの使用を開始する可能性があります。
数年後... :)
コアは常に$ thisを返します。オブザーバーメソッドのコンテキスト-[...]
または
メソッドが他の戻り値を持たない場合、常にvoid(nothing)の代わりに$ thisを返すのは単なるMagentoの慣例です[...]
いやいや。1.9.3.xの一部のオブザーバーをチェックしただけで、多くのオブザーバーは何も返しません(void
)。したがって、「コアコードが何をするのか」は本当に明確ではありません;)
私$return $this;
も自分のコードで使用しましたが、今日-M1コードに変更はありません-そのままにします。私は他のコードを読んだ場合、void
メソッドは盲目的に追加されたものよりも明確であると思いますreturn $this
、それは決して使用されません。
編集:
Aoe_Schedulerを使用している場合は、string
またはarray
を返し、cron履歴に表示することもできます。
この機能のドキュメントが見つかりません...関連するコードはこちら:https : //github.com/AOEpeople/Aoe_Scheduler/blob/master/app/code/community/Aoe/Scheduler/Model/Schedule.php#L229- L259