【问题标题】:Magento: Is it safe to override event observer core class?Magento:重写事件观察者核心类是否安全?
【发布时间】:2011-04-29 02:50:16
【问题描述】:

假设,核心中有一个事件观察器类。我可以覆盖它。但是,安全吗?我的意思是,它会影响观察者类的其他功能吗?

例如,如果核心观察者类中有两个函数,而我确实只覆盖了一个函数。那么,其他功能是否会像以前一样安全运行。

我认为它类似于模型覆盖,应该是安全的。我说的对吗?

编辑:-

例如,

  • 核心中有一个类CoreClassA
  • CoreClassA中有一个函数coreFunctionA
  • 在这个 coreFunctionA 中调度了一个事件 core_event_a
  • 另一个核心模块 CoreModuleB 正在使用 core_event_a 创建事件观察器。
  • 因此,无论何时调度 core_event_a,都会调用 CoreModuleB 的事件观察器。
  • 假设,CoreModuleB 的事件观察器包含两个函数。一个用于 core_event_a 调度操作(让我们将其命名为 eventDispatchA),另一个用于其他事件调度操作(例如 eventDispatchX)。
  • 在我的自定义模块中,我想覆盖 eventDispatchA基本上,我想更改 eventDispatchA 中的一些代码,或者我可能只想跳过/省略这个函数。我可以覆盖它。 但是,如果我这样做会影响 eventDispatchX 吗?或者,除了覆盖事件观察者之外,还有其他更好的方法吗?

【问题讨论】:

  • 你能告诉我们你为什么要覆盖这个类吗?可能有更好的方法来达到同样的效果
  • 已编辑。我希望我没有让它变得更复杂。 :)

标签: php events magento overriding observer-pattern


【解决方案1】:

很可能会,但如果你覆盖了其他人可能正在使用的东西,那么做类似的东西总是值得的:

    public function samefunction($object){
        if(mymodueleisused){
            //do your different thing
        } else {
           return parent::samefunction();
        }
    }

正如其他人告诉您的那样:“如果您需要更改/覆盖核心,那么您可能做错了”,最好通过描述您想要做什么以及为什么以不同的方式提问

【讨论】:

  • 谢谢。我要求一个总体概述。当我覆盖观察者时,我将扩展它的核心类。所以,我认为它不会影响核心类的其他功能。
  • 取决于,如果你扩展和覆盖一个方法,那么它肯定会,如果你添加新方法并且那些不是从核心方法调用的,那么就不会
  • 很好地测试哪个模块正在使用覆盖
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 2016-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-03
相关资源
最近更新 更多