Magento中的术语覆盖和重写是否相同。我已经搜索了很多但没有找到任何答案。
由于
答案 0 :(得分:7)
简短回答:是的,虽然这取决于你与谁交谈。
所有重写都是覆盖,但并非所有覆盖都是重写。 Magento 中的重写应仅引用基于配置的类重写。框架使用工厂方法来实例化MVC类型:
Mage_Core_Model_Layout->createBlock()
Mage::helper()
Mage::getModel()
Mage::getResourceModel()
这些方法通常将类组(例如catalog
)与类前缀(例如Mage_Catalog_Model
)匹配,以便实例化特定类(例如Mage::getModel('catalog/product')
产生Mage_Catalog_Model_Product
)。此映射允许开发人员指定与类参数关联的特定xpath(例如'catalog/product'
& global/models/catalog/rewrite/product
)以指定要实例化的备用类。从那里开发人员有责任使用适当的继承来实现适当的覆盖和放弃。扩展行为。
还有其他实现覆盖的机制,其中最常见的是所谓的“包含路径黑客”,它允许来自“较低”自动加载目录的类在(更高)在更高级目录中定义。遵循优先顺序(请注意 app / code / local / ):
这种覆盖方式应被视为更改核心代码的最后一种方法。它有合法的用例(特别是服从DRY),但在升级时可能并不明显。