답변:
대답은 훨씬 간단합니다. 2007 년 (그리고 PhpStorm이 흔들기 시작한 2009 년까지는 믿습니다) 어느 IDE도 인라인 phpdoc을 제공 할 수 없었습니다 $this
. 그러나 핵심 개발자는 IDE에서 자동 완성 기능을 원했습니다. 그래서이 두 줄을 사용했습니다.
$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
(예 : Mag_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. 교체 :
$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> 마법사 :: init (); php> 'app / code / local / Vendor / Module / data / vendormodule_setup / data-upgrade-0.1.1-0.1.2.php'가 필요합니다; 업그레이드가 성공했습니다! 디버그 데이터 덤프 : array (4) { 'id'=> 정수 (123) 'foo'=> 문자열 (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)에서 온 것 같아요. 그러나 솔직히 말해서, 나는 모른다. 나는 그것이 더 잘 읽을 수 있다고 생각합니다 ...
우린 항상 이렇게 했어
알다시피 ;-)