Хорошо, при использовании сценариев установки существует странное соглашение использовать следующее:
$installer = $this;
Я действительно не понимаю этого, так как это совершенно излишне.
Почему бы просто не использовать $this->
всюду по сценарию?
Любые идеи о том, почему существует эта конвенция?
magento-1
installation
resource-model
setup-script
install-script
Марти Уоллес
источник
источник
Ответы:
Ответ намного проще. В 2007 году (и я считаю, что до 2009 года, когда PhpStorm начал качаться), ни одна IDE не позволяла предоставлять встроенный phpdoc
$this
. Но разработчики ядра хотели иметь автозаполнение в IDE. Вот почему они использовали эти 2 строки:Некоторые модули имеют собственный класс установки, и он должен был использоваться во встроенном phpdoc. Но поскольку скрипт установки / обновления (и всегда) создавался с помощью «копирования / вставки некоторого существующего и изменения», вы можете найти, возможно, примеры, когда модуль имеет собственный класс настройки (или использует модель настройки eav
Mage_Eav_Model_Entity_Setup
), ноMage_Catalog_Model_Resource_Setup
используется во встроенном phpdoc при обновлении скрипт.источник
Самая старая версия у меня есть 1.0. Даже тогда
$installer = $this;
существовал. Даже в названных файлахupgrade-0.x.y-0.z.t
эта строка существует.По моему мнению, когда они начали (я имею в виду версию 0.1 или что-то в этом роде), у них было что-то подобное,
$installer = new Something()
и они решили изменить логику.Я предполагаю это из-за
<class>
тега вconfig.xml
некоторых модулях (например, Mage_Catalog). Версии до 1.6:Или в версиях 1.6+:
Я обычно использую
$this
вместо,$installer
и у меня не было никаких проблем (если это имеет какое-либо значение).источник
Это соглашение о неизвестной и, возможно, сомнительной логике, присутствующей со времени самой ранней публичной бета-версии 2007 года ( Preview B1 0.6.12383 ; требуется вход в систему).
Это используется в качестве соглашения, чтобы гарантировать, что класс, который выполняет код установки, последовательно псевдоним в сценариях установки. Например, в то время как оба
Enterprise_GiftWrapping
иEnterprise_Rma
модули имеют свои собственные классы настройки, каждый из них псевдонима$installer
для экземпляраMage_Catalog_Model_Resource_Setup
при добавлении атрибутов сущности продукта, например:Приложение / код / ядро / Enterprise / подарочная упаковка / SQL / enterprise_giftwrapping_setup / установки-1.11.0.0.php
источник
Одна вещь, которая мне нравится в использовании,
$installer
которую я действительно хочу добавить, это то, что она позволяет легко заменить ее чем-то другим или запустить за пределами области действия класса.1. Замена этого:
2. За пределами области:
Конечно с
data-upgrade-0.1.1-0.1.2.php
наличием:Так это мешает
Fatal error: Using $this when not in object context
источник
Я предполагаю, что это с более ранних дней (<v.1.1). Но если честно, понятия не имею. Я думаю, что это немного лучше читается ...
Вы знаете ;-)
источник