我在互联网上以及在第三方模块中都看到了一些冲突的信息- $this
在观察者方法结束时返回是一种要求还是最佳实践?
例如:
MyCompany_Module_Model_Observer.php
public function salesOrderSaveAfter($observer){
//do stuff
return $this;
}
我在互联网上以及在第三方模块中都看到了一些冲突的信息- $this
在观察者方法结束时返回是一种要求还是最佳实践?
例如:
MyCompany_Module_Model_Observer.php
public function salesOrderSaveAfter($observer){
//do stuff
return $this;
}
Answers:
核心总是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
当观察者的流利接口真正没有用时返回。
这是一个Magento约定,如果某个方法没有其他返回值,则总是返回$this
而不是void
(什么都没有),无论该方法实际上是否在任何地方都用于流畅的接口。
好处是,您无需考虑它是否有用,并且多余的流利界面比缺少的界面要好。同样,Magento 可能会开始将它们用作观察者,即使这种可能性很小。
几年后... :)
核心总是返回$ this; 在观察者方法的上下文中-[...]
要么
如果方法没有其他返回值,总是返回$ this而不是void(什么都没有)只是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