Ok, przy użyciu skryptów instalacyjnych wydaje się, że istnieje dziwna konwencja polegająca na użyciu następujących elementów:
$installer = $this;
Naprawdę nie rozumiem tego, ponieważ jest całkowicie zbędny.
Dlaczego nie użyć w $this->
całym skrypcie?
Wszelkie pomysły dotyczące tego, dlaczego ta konwencja istnieje?
magento-1
installation
resource-model
setup-script
install-script
Marty Wallace
źródło
źródło
Odpowiedzi:
Odpowiedź jest znacznie prostsza. W 2007 roku (i sądzę, że do 2009 roku, kiedy PhpStorm zaczął się bujać) nikt nie mógł pozwolić na dostarczenie wbudowanego phpdoc
$this
. Ale główni programiści chcieli mieć autouzupełnianie w IDE. Dlatego użyli tych 2 linii:Niektóre moduły mają własną klasę instalacyjną i powinny być użyte w wbudowanym phpdoc. Ale ponieważ skrypt instalacyjny / aktualizacyjny był (i jest) zawsze tworzony poprzez „skopiuj / wklej istniejący i zmień”, możesz znaleźć przykłady, gdy moduł ma własną klasę instalacyjną (lub używa modelu instalacyjnego eav
Mage_Eav_Model_Entity_Setup
), aleMage_Catalog_Model_Resource_Setup
jest używany w wbudowanym phpdoc w aktualizacji scenariusz.źródło
Najstarsza wersja, którą mam, to 1.0. Nawet wtedy
$installer = $this;
istniało. Nawet w plikach o nazwieupgrade-0.x.y-0.z.t
ta linia istnieje.Moim zdaniem, kiedy zaczęli (mam na myśli wersję 0.1 lub coś w tym stylu), mieli coś takiego
$installer = new Something()
i postanowili zmienić logikę.Zakładam to ze względu na
<class>
znacznik wconfig.xml
niektórych modułach (na przykład Mage_Catalog). Wersje przed 1.6:Lub w wersjach 1.6+:
Zwykle używam
$this
zamiast$installer
i nie miałem żadnego problemu (jeśli to w jakikolwiek sposób ma znaczenie).źródło
Jest to konwencja o nieznanej i prawdopodobnie wątpliwej logice obecna od najwcześniejszej publicznej wersji beta z 2007 roku (wersja zapoznawcza B1 0.6.12383 ; wymagane logowanie).
Jest używany jako konwencja, aby zapewnić, że klasa, która wykonuje kod instalacyjny, jest konsekwentnie aliasowana w skryptach instalacyjnych. Na przykład, chociaż oba moduły
Enterprise_GiftWrapping
iEnterprise_Rma
mają swoje własne klasy konfiguracji, każdy z nich jest aliasem$installer
do wystąpieniaMage_Catalog_Model_Resource_Setup
podczas dodawania atrybutów do encji produktu, np .:app / code / core / Enterprise / GiftWrapping / sql / enterprise_giftwrapping_setup / install-1.11.0.0.php
źródło
Jedną z rzeczy, które lubię w używaniu
$installer
, którą naprawdę chcę dodać, jest to, że ułatwia to zastąpienie go czymś innym lub uruchomienie go poza zakresem klasy.1. Wymiana:
2. Poza zakresem:
Oczywiście
data-upgrade-0.1.1-0.1.2.php
mając:To zapobiega
Fatal error: Using $this when not in object context
źródło
Sądzę, że pochodzi on z wcześniejszych dni (<v.1.1). Ale szczerze mówiąc, nie mam pojęcia. Myślę, że jest to trochę lepiej czytelne ...
Wiesz ;-)
źródło