Yükleme komut dosyalarında $ installer v $ this kullanımı


17

Tamam, yükleme komut dosyalarını kullanarak aşağıdakileri kullanmak için garip bir kural var gibi görünüyor:

$installer = $this;

Tamamen gereksiz olduğu için bunu gerçekten anlamıyorum.

Neden sadece $this->senaryo boyunca kullanmıyorsunuz ?

Bu sözleşmenin neden var olduğu hakkında bir fikriniz var mı?


Bunun vscode içinde nesne bağlamı dışında kullanılması hakkında uyarılar alıyorum. Bunu nasıl düzeltebileceğim hakkında bir fikrin var mı?
Henry's Cat

Yanıtlar:


11

Cevap çok daha basit. 2007'de (ve PhpStorm'un sallanmaya başladığı 2009 yılına kadar) hiçbir IDE'nin satır içi phpdoc sağlamasına izin verilmedi $this. Ancak çekirdek geliştiriciler IDE'de otomatik tamamlama yapmak istedi. Bu yüzden bu 2 satırı kullandılar:

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

Bazı modüller kendi kurulum sınıfına sahiptir ve satır içi phpdoc'da kullanılmalıdır. Ancak, kurulum / yükseltme komut dosyası her zaman "mevcut olanı kopyala / yapıştır ve değiştir" yoluyla oluşturulduğundan (ve oluşturulduğundan), modülün kendi kurulum sınıfına sahip olması (veya eav kurulum modelini kullanması Mage_Eav_Model_Entity_Setup) ancak Mage_Catalog_Model_Resource_Setupyükseltme sırasında satır içi phpdoc'da kullanılması durumunda örnekleri bulabilirsiniz. senaryo.


8

Sahip olduğum en eski sürüm 1.0. O zaman bile $installer = $this;vardı. İsimli dosyalarda bileupgrade-0.x.y-0.z.tBu satırda var.

Benim düşünceme göre, başladığında (yani 0.1 veya benzeri bir şey) böyle bir şeyleri vardı $installer = new Something()ve mantığı değiştirmeye karar verdiler.
Bu bazı modüller (örneğin Mage_Catalog) <class>etiketi nedeniyle varsayalım config.xml. 1.6 öncesi sürümler:

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

Veya 1.6+ sürümlerinde:

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

Genellikle $thisyerine kullanıyorum $installerve herhangi bir sorunum yoktu (eğer herhangi bir şekilde önemli olursa).


5

Bu, 2007'nin ilk kamu beta sürümünden bu yana bilinmeyen ve muhtemelen şüpheli bir mantık sözleşmesidir ( Önizleme B1 0.6.12383 ; giriş gereklidir).

Kurulum kodunu çalıştıran sınıfın kurulum komut dosyalarında tutarlı bir şekilde diğer adının oluşturulmasını sağlamak için bir kural olarak kullanılır. Örneğin, hem Enterprise_GiftWrappingve Enterprise_Rmamodüllerin kendi kurulum sınıfları olsa da, her biri ürün varlığına öznitelik eklerken $installerbir örneğe takma ad oluştururlar Mage_Catalog_Model_Resource_Setup, örneğin:

Uygulamanın / kod / çekirdek / Kurumsal / GiftWrapping / 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

4

$installerBen gerçekten eklemek istiyorum kullanma hakkında bir şey , onu başka bir şey ile değiştirmek veya sınıf kapsamı dışında çalıştırmak için kolaylaştırır olmasıdır.


1. Değiştirilmesi:

$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. dış kapsam:

$ php -a
php> requir_once 'app / Mage.php';
php> Mage :: init ();
php> gerektiren 'app / code / local / Satıcı / Modül / data / vendormodule_setup / data-upgrade-0.1.1-0.1.2.php';
Yükseltme çalıştı!
Hata ayıklama veri dökümü: dizi (4) {
  'id' =>
  int (123)
  'foo' =>
  dize (3) "çubuk"
}

Tabii ki data-upgrade-0.1.1-0.1.2.php:

//$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);

Böylece bu Fatal error: Using $this when not in object context


$ installer = Mage :: getSingleton ('eav / entity_setup', 'eav_setup'); hatırlamak önemlidir ... Sadece Mage :: getResourceModel ile sınırlı değilsiniz ('katalog / kurulum' ...
CarComp

3

Sanırım daha önceki günlerden (<v.1.1). Ama dürüst olmak gerekirse, hiçbir fikrim yok. Bence biraz daha iyi okunabilir ...

Hep böyle yaptık

Bilirsin ;-)


Herhangi bir PHP OOP kodunda çok mantıklı olduğunu sanmıyorum, ama başlangıçta da kullanılır. Sonra bir noktada bu kısmı tamamen görmezden geldi ve hiçbir sorun yaşamadım. Benim deneyimim, bu kodu güvenle yok sayabilirsiniz.
Petar Dzhambazov

Evet, ben de öyle düşünüyorum. Ben sadece alışkınım ...
Fabian Blechschmidt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.