magento中覆盖和重写之间的区别

时间:2013-06-14 09:54:24

标签: magento magento-1.7

Magento中的术语覆盖和重写是否相同。我已经搜索了很多但没有找到任何答案。

由于

1 个答案:

答案 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 / ):

  • 应用程序/代码/小区/
  • 应用程序/代码/核心/
  • LIB /

这种覆盖方式应被视为更改核心代码的最后一种方法。它有合法的用例(特别是服从DRY),但在升级时可能并不明显。