Mage_Payment_Model_Method_Abstract类覆盖

时间:2014-06-05 17:35:31

标签: magento override

由于标题建议我要覆盖Mage_Payment_Model_Method_Abstract课程,我知道它是abstract class。我们可以使用像app\code\local\Mage\Payment\Model\Method\Abstract.php这样的本地目录轻松覆盖抽象类。但我想知道我还有其他选择吗?因为使用不同的magento版本,此选项不安全。

任何帮助将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:1)

'覆盖'是一种将Magento核心的类复制到本地代码的方法。例如:

app/code/core/Mage/Rule/Model/Abstract.php

app/code/local/Mage/Rule/Model/Abstract.php

您可以通过覆盖告诉Magento“Use this class file instead of the other class file”。类似,但不同于重写。 Rewrites被认为是更好的做法,因为它们不太可能导致升级和扩展兼容性问题。

An abstract class is never instantiated, it can never be rewritten.

如果覆盖,则需要注意将来的升级。您无法重写抽象类。重写系统有效,因为Magento使用工厂模式来实例化模型,块和帮助器。

另一种选择是使用传统的类覆盖。例如:复制

app/code/core/Mage/Rule/Model/Abstract.php

app/code/local/Mage/Rule/Model/Abstract.php

同样在博客的某个地方我读过这篇文章(不赞成),例如:复制

Mage_Shipping_Model_Carrier_Abstract

来自

app/code/core/Mage/Shipping/Model/Carrier

app/code/local/Mage/Shipping/Model/Carrier

请勿更改类名,只需根据需要更改或添加方法即可。

这是一个技巧。 Magento从多个位置加载一个类, app / code / local app / code / core

之前加载 祝你好运!!!