回答:
答えははるかに簡単です。2007年(およびPhpStormが揺れ始めた2009年まで)、誰もIDEにインラインphpdocを提供できませんでした$this
。しかし、コア開発者はIDEでオートコンプリートが必要でした。そのため、彼らはこれらの2行を使用しました。
$installer = $this;
/* @var $installer <appropriate class> */
一部のモジュールには独自のセットアップクラスがあり、インライン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以前のバージョン:
<setup>
<module>Mage_Catalog</module>
<class>Mage_Catalog_Model_Resource_Eav_Mysql4_Setup</class>
</setup>
またはバージョン1.6以降:
<setup>
<module>Mage_Catalog</module>
<class>Mage_Catalog_Model_Resource_Setup</class>
</setup>
私は通常、$this
代わりに使用し$installer
、問題はありませんでした(何らかの方法で問題が発生した場合)。
これは、2007年の初期のパブリックベータ以降に存在する未知の、おそらく疑わしいロジックの規則です(プレビューB1 0.6.12383、ログインが必要です)。
これは、セットアップコードを実行しているクラスがセットアップスクリプトで一貫してエイリアスされるようにするための規則として使用されます。たとえば、Enterprise_GiftWrapping
とEnterprise_Rma
モジュールの両方に独自のセットアップクラス$installer
がありますがMage_Catalog_Model_Resource_Setup
、製品エンティティに属性を追加する場合のインスタンスのエイリアスはそれぞれ次のとおりです。
app / code / core / Enterprise / 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
$installer
私が本当に追加したい使用方法で気に入っていることの1つは、簡単に別のものに置き換えたり、クラススコープ外で実行したりできることです。
1.交換:
$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.範囲外:
$ 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'; アップグレードが機能しました! デバッグデータダンプ:array(4){ 'id' => int(123) 'foo' => string(3) "bar" }
もちろんです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);
だからこれは防ぐ Fatal error: Using $this when not in object context
私はそれが初期(<v.1.1)からだと思います。しかし、正直に言うと、私にはわからない。私はそれが少し読みやすいと思います...
私たちはいつもこのようにしてきました
ええと ;-)