Question

Ok, en utilisant des scripts d'installation, il semble être une convention bizarre d'utiliser ce qui suit:

$installer = $this;

Je ne comprends vraiment pas car il est complètement redondant.

Pourquoi ne pas simplement utiliser $this-> à travers le script?

Toutes les idées sur les raisons de cette convention existe?

Était-ce utile?

La solution

La réponse est beaucoup plus simple. En 2007 (et je crois jusqu'en 2009 quand PhpStorm a commencé à bascule) ne IDE autorisé à fournir phpdoc en ligne pour $this. Mais les développeurs de base voulait avoir autocomplétion dans IDE. Voilà pourquoi ils ont utilisé ces 2 lignes:

$installer = $this;
/* @var $installer <appropriate class> */

Certains modules ont propre classe d'installation et il aurait dû être utilisé dans phpdoc en ligne. Mais parce que le script d'installation / mise à niveau étaient (et sont) toujours créé par « copier / coller certains existant et le changement », vous trouverez peut-être des exemples lorsque le module a sa propre classe d'installation (ou utilise le modèle de configuration de la Mage_Eav_Model_Entity_Setup) mais Mage_Catalog_Model_Resource_Setup est utilisé dans phpdoc en ligne dans le script de mise à niveau.

Autres conseils

La version la plus ancienne que j'ai est 1.0. Même alors existait $installer = $this;. Même dans les fichiers nommés upgrade-0.x.y-0.z.t cette ligne existe.

A mon avis, quand ils ont commencé (je la version moyenne 0.1 ou quelque chose comme ça), ils avaient quelque chose comme $installer = new Something() et ils ont décidé de changer la logique.
Je suppose que cela à cause de la balise <class> dans le config.xml de certains modules (Mage_Catalog par exemple). Versions avant 1.6:

<setup>
    <module>Mage_Catalog</module>
    <class>Mage_Catalog_Model_Resource_Eav_Mysql4_Setup</class>
</setup> 

Ou dans les versions 1.6+:

<setup>
    <module>Mage_Catalog</module>
    <class>Mage_Catalog_Model_Resource_Setup</class>
</setup>

J'utilise habituellement $this au lieu de $installer et je n'ai pas eu aucun problème (si ce maters de quelque manière).

Ceci est une convention d'inconnu et peut-être douteuse présente logique puisque la première de 2007 version bêta publique ( Aperçu B1 0.6.12383 , connexion requise)

.

Il est utilisé comme une convention pour faire en sorte que la classe qui exécute le code d'installation est toujours dans les scripts aliasé configuration. Par exemple, alors que les deux Enterprise_GiftWrapping et modules Enterprise_Rma ont leurs propres classes d'installation, ils ont chacun $installer alias à une instance de Mage_Catalog_Model_Resource_Setup lors de l'ajout des attributs à l'entité produit, par exemple:.

app / code / core / Enterprise / emballage cadeau / SQL / enterprise_giftwrapping_setup / install-1.11.0.0.php

<?php

$installer = $this;
/* @var $installer Enterprise_GiftWrapping_Model_Resource_Setup */
//... miscellaneous Enterprise_GiftWrapping setup logic

$installer = Mage::getResourceModel('catalog/setup', 'catalog_setup');
//... miscellaneous product entity attribute manipulation

Une chose que je comme sur l'utilisation $installer que je veux vraiment ajouter est qu'il rend facile de le remplacer par quelque chose d'autre ou pour l'exécuter en dehors du champ de la classe.


1. Remplaçant:

$installer = $this;
/* @var $installer Mage_Core_Model_Resource_Setup */
// Do basic stuff

$installer = Mage::getSingleton('eav/entity_setup', 'eav_setup');
/* @var $installer Mage_Eav_Model_Entity_Setup */
/// Do stuff with attributes


2. champ extérieur:

$ php -a
php > require_once 'app/Mage.php';
php > Mage::init();
php > require 'app/code/local/Vendor/Module/data/vendormodule_setup/data-upgrade-0.1.1-0.1.2.php';
Upgrade worked!
Debug data dump: array(4) {
  'id' =>
  int(123)
  'foo' =>
  string(3) "bar"
}

Bien sûr, avec data-upgrade-0.1.1-0.1.2.php ayant:

//$installer = $this;
$installer = Mage::getResourceSingleton('core/setup', 'vendormodule_setup');
/* @var $installer Mage_Core_Model_Resource_Setup */

// Do lots of stuff ...

echo "Upgrade worked!\n";
echo "Debug data dump: ";
var_dump($debug);

On évite ainsi Fatal error: Using $this when not in object context

Je suppose que c'est des jours précédents (

  

Nous avons toujours fait comme ça

Vous savez; -)

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top