由于标题建议我要覆盖Mage_Payment_Model_Method_Abstract
课程,我知道它是abstract class
。我们可以使用像app\code\local\Mage\Payment\Model\Method\Abstract.php
这样的本地目录轻松覆盖抽象类。但我想知道我还有其他选择吗?因为使用不同的magento版本,此选项不安全。
任何帮助将不胜感激。
谢谢
答案 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
之前加载 祝你好运!!!