Ok, en utilisant des scripts d'installation, il semble y avoir une convention étrange pour utiliser ce qui suit:
$installer = $this;
Je ne comprends vraiment pas cela car c'est complètement redondant.
Pourquoi ne pas simplement utiliser $this->
tout au long du script?
Des idées sur la raison de cette convention?
magento-1
installation
resource-model
setup-script
install-script
Marty Wallace
la source
la source
Réponses:
La réponse est beaucoup plus simple. En 2007 (et je crois jusqu'en 2009, lorsque PhpStorm a commencé à basculer), aucun IDE n'a permis de fournir du phpdoc en ligne
$this
. Mais les développeurs principaux voulaient avoir l'auto-complétion dans IDE. C'est pourquoi ils ont utilisé ces 2 lignes:Certains modules ont leur propre classe de configuration et elle aurait dû être utilisée en phpdoc en ligne. Mais parce que le script de configuration / mise à niveau a été (et est) toujours créé via "copier / coller une copie existante et la modifier", vous pouvez trouver des exemples de module ayant sa propre classe de configuration (ou utilisant le modèle de configuration eav
Mage_Eav_Model_Entity_Setup
) maisMage_Catalog_Model_Resource_Setup
utilisé en phpdoc en ligne dans la mise à niveau scénario.la source
La version la plus ancienne que j'ai est 1.0. Même alors
$installer = $this;
existé. Même dans les fichiers nommés,upgrade-0.x.y-0.z.t
cette ligne existe.À mon avis, quand ils ont commencé (je veux dire la version 0.1 ou quelque chose comme ça), ils avaient quelque chose comme ça
$installer = new Something()
et ils ont décidé de changer la logique.Je suppose cela à cause de la
<class>
balise dansconfig.xml
certains modules (Mage_Catalog par exemple). Versions antérieures à 1.6:Ou dans les versions 1.6+:
J'utilise habituellement à la
$this
place de$installer
et je n'ai eu aucun problème (si cela est important).la source
Il s'agit d'une convention de logique inconnue et peut-être douteuse présente depuis la première version bêta publique de 2007 ( aperçu B1 0.6.12383 ; connexion requise).
Il est utilisé comme convention pour garantir que la classe qui exécute le code d'installation est systématiquement aliasée dans les scripts d'installation. Par exemple, alors que les modules
Enterprise_GiftWrapping
etEnterprise_Rma
ont leurs propres classes de configuration, ils ont chacun un alias$installer
pour une instanceMage_Catalog_Model_Resource_Setup
lors de l'ajout d'attributs à l'entité produit, par exemple:app / code / core / Enterprise / GiftWrapping / sql / enterprise_giftwrapping_setup / install-1.11.0.0.php
la source
Une chose que j'aime à propos de l'utilisation
$installer
que je veux vraiment ajouter, c'est qu'il est facile de le remplacer par quelque chose d'autre ou de l'exécuter en dehors de la portée de la classe.1. Le remplacer:
2. Champ d'application extérieur:
Bien sûr d'
data-upgrade-0.1.1-0.1.2.php
avoir:Cela empêche donc
Fatal error: Using $this when not in object context
la source
Je suppose que c'est des jours précédents (<v.1.1). Mais pour être honnête, je n'en ai aucune idée. Je pense que c'est un peu plus lisible ...
Tu sais ;-)
la source