Magento中的所有块都从摘要继承,并在代码片段中继承:
#File: app/code/core/Mage/Core/Block/Abstract.php
public function setLayout(Mage_Core_Model_Layout $layout)
{
$this->_layout = $layout;
Mage::dispatchEvent('core_block_abstract_prepare_layout_before', array('block' => $this));
$this->_prepareLayout();
Mage::dispatchEvent('core_block_abstract_prepare_layout_after', array('block' => $this));
return $this;
}
有两种方法可以挂钩核心块的准备布局:
第二个优点是事件/观察者模式是实现其他功能的更好,更稳定的选择。 但是,缺点是观察者必须为准备布局的每个块运行。
这里有哪种更好的编程技术?
答案 0 :(得分:2)
如果重写Abstract类,大多数块仍将使用核心中的块,因为它们直接从它扩展而不使用Magento重写规则。 所以我会用你的第二个解决方案。即使在每个块上都有观察者,性能问题也不应该那么大,因为在大多数情况下,你只需用instanceof执行一个简单的条件,这非常快。