Mage_Core_Block_Abstract::getHelper()
Метод Mage_Core_Model_Layout::getBlockSingleton()
не возвращает вспомогательный объект Magento, а скорее экземпляр блока типа объекта Magento.
Я считаю, что это устаревший код, такой как метод Mage::getBlockSingleton()
устарел.
В обоих случаях экземпляр блока создается из идентификатора класса Magento.
Метод getBlockSingleton()
сохраняет экземпляр в свойстве $_helpers
объекта макета, метод createBlock()
сохраняет его в свойстве $_blocks
.
Только блоки из массива $_blocks
могут ссылаться (и перезаписываться) с использованием XML макета.
Метод getBlockSingleton()
полезен, если вам нужен экземпляр определенного класса блока, и вы хотите убедиться, что не создаете новый экземпляр блока, если он уже существует.
Для достижения (почти) того же эффекта с экземплярами, созданными с помощью createBlock()
, вам потребуется следующий код:
public function alternativeGetBlockSingleton($classId)
{
foreach (Mage::app()->getLayout()->getAllBlocks() as $block)
{
if ($block->getType() == $classId)
{
return $block;
}
}
return $this->createBlock($classId);
}
Mage_Core_Block_Abstract::helper()
Метод Mage_Core_Block_Abstract::helper()
возвращает экземпляр того, что в Magento обычно называют помощником.
Единственное отличие от прямого вызова Mage::helper($name)
заключается в том, что объект макета устанавливается как свойство в экземпляре помощника.
Можно утверждать, что использование $this->helper()
в файлах шаблонов является более чистым, чем Mage::helper()
, поскольку уменьшает количество жестко закодированных ссылок (и, следовательно, зависимости) до класса Mage
, но в случае Magento этот аргумент бесполезно, потому что каждый модуль очень зависит от Mage
и некоторых классов Mage_Core
в любом случае.
На практике, вероятно, нет функциональной причины предпочитать один другому, за исключением того, что Mage::helper()
является гораздо более распространенным и общеизвестным. Для других разработчиков будет меньше путаницы читать код, что делает его более понятным.
С другой стороны, Magento полностью зависит от выбора и имеет множество способов выполнить заданную задачу.