オブザーバーの後にこれを返します
-
16-10-2019 - |
質問
インターネットやサードパーティのモジュールにも矛盾する情報が表示されます。返すための要件かベストプラクティスですか $this
オブザーバーメソッドの終わりに?
例えば:
mycompany_module_model_observer.php
public function salesOrderSaveAfter($observer){
//do stuff
return $this;
}
解決
常にコア 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
- しかし、それは言われています、彼らがコアでそれをするならば、それが私たちがしていることです。
一般的なルールとして、コアが何をするにしても - 私たちはベストプラクティスとみなします。 衝撃的なスペルミスを除いて :)
他のヒント
$これ(しゃれを意図した)は、流fluentインターフェイスと呼ばれます。これにより、定義された変数を参照せずにオブジェクト内の複数のメソッドを呼び出すことができます。
常に戻ってくるのはマゼントコンベンションです $this
それ以外の void
(何もない)メソッドには、どこでも流fluentインターフェイスに使用されているかどうかに関係なく、メソッドに他の返品値がない場合。
利点は、それが有用であるかどうかを考える必要がないこと、そして余分な流fluentインターフェイスが欠落しているよりも優れていることです。また、マゼント そうかもしれない これは非常にありそうもないにもかかわらず、それらをオブザーバーに使用し始めます。
数年後... :)
コアは常にこれを返します。オブザーバーの方法の文脈で - [...
また
メソッドに他の返品値がない場合、常に$(何もない)ではなくこれを常に返すことはマゼントコンベンションです[...
いいえ本当に。 1.9.3.xでいくつかのオブザーバーをチェックし、多くの人が何も返しませんでした(void
)。したがって、「Core Codeが何をするのか」はあまり明確ではありません;)
私は使用しました $return $this;
私のコードでもありますが、今日 - M1コードに変更はありません - 私はそれを残します。私は思う - 私が他のコードを読むなら - void
方法は盲目的に追加されたものよりも明確です return $this
, 、それは決して使用されません。
編集:
aoe_schedulerを使用する場合は、aを返すこともできます string
また array
Cronの歴史にそれを表示します。
この機能のドキュメントが見つかりません...関連コードはこちら: https://github.com/aoepeople/aoe_scheduler/blob/master/app/code/community/aoe/scheduler/model/schedule.php#l229-l259