我在互联网和第三方模块中看到了一些相互矛盾的信息 - 是返回的必要性还是最佳实践 $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 在克朗历史上显示它。

enter image description here

找不到有关此功能的任何文档...相关代码: https://github.com/aoepeople/aoe_scheduler/blob/master/app/code/community/aoe/aoe/scheduler/model/model/schedule.php#l229-l259

许可以下: CC-BY-SA归因
scroll top