-
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
- 但话虽如此,如果他们以核心做到这一点,那就是我们要做的。
一般而言,无论核心做什么,我们都认为最佳实践。 除了令人震惊的拼写错误 :)
其他提示
$ this(双关语)称为流利的界面。它允许您在对象中调用多个方法,而无需引用定义的变量。
这只是一个总是返回的洋红色大会 $this
代替 void
(什么都没有)如果方法没有其他返回值,那么无论是否在任何地方都用于流利的接口。
优点是,您无需考虑是否有用,而多余的流利界面比丢失的界面更好。另外,Magento 可能 即使这极不可能,也开始将它们用于观察者。
几年后... :)
核心总是返回$ this;在观察者方法的背景下 - [...
或者
如果方法没有其他返回值[...
不完全是。刚刚检查了1.9.3.x的一些观察者,许多人都没有返回(void
)。因此,还不清楚“核心代码的作用”;)
我用过了 $return $this;
在我的代码中,今天 - M1代码不会发生任何更改 - 我会离开它。我认为 - 如果我阅读其他代码 - void
方法比盲目添加的方法更清楚 return $this
, ,从来没有使用过。
编辑:
如果使用AOE_SCHEDULER,您也可以返回 string
或者 array
在克朗历史上显示它。
找不到有关此功能的任何文档...相关代码: https://github.com/aoepeople/aoe_scheduler/blob/master/app/code/community/aoe/aoe/scheduler/model/model/schedule.php#l229-l259