Oke, menggunakan skrip instal tampaknya ada konvensi aneh untuk menggunakan berikut ini:
$installer = $this;
Saya benar-benar tidak mengerti ini karena benar-benar berlebihan.
Mengapa tidak menggunakan $this->
seluruh skrip saja?
Adakah ide mengapa konvensi ini ada?
magento-1
installation
resource-model
setup-script
install-script
Marty Wallace
sumber
sumber
Jawaban:
Jawabannya jauh lebih sederhana. Pada 2007 (dan saya yakin sampai 2009 ketika PhpStorm mulai goyang) tidak ada satu pun IDE yang diizinkan untuk menyediakan phpdoc sebaris untuk
$this
. Tetapi pengembang inti ingin memiliki pelengkapan otomatis dalam IDE. Itu sebabnya mereka menggunakan 2 baris ini:Beberapa modul memiliki kelas pengaturan sendiri dan seharusnya sudah digunakan di phpdoc inline. Tetapi karena skrip setup / upgrade selalu dibuat melalui "copy / paste beberapa yang sudah ada dan ubah" Anda dapat menemukan contoh-contoh ketika modul memiliki kelas setup sendiri (atau menggunakan model setup EAV
Mage_Eav_Model_Entity_Setup
) tetapiMage_Catalog_Model_Resource_Setup
digunakan dalam phpdoc inline dalam upgrade naskah.sumber
Versi tertua yang saya miliki adalah 1.0. Bahkan kemudian
$installer = $this;
ada. Bahkan dalam file bernamaupgrade-0.x.y-0.z.t
baris ini ada.Menurut pendapat saya, ketika mereka mulai (maksud saya versi 0.1 atau sesuatu seperti itu) mereka memiliki sesuatu seperti
$installer = new Something()
dan mereka memutuskan untuk mengubah logika.Saya menganggap ini karena
<class>
tag padaconfig.xml
beberapa modul (Mage_Catalog misalnya). Versi sebelum 1.6:Atau dalam versi 1.6+:
Saya biasanya menggunakan
$this
bukan$installer
dan saya tidak punya masalah (jika itu masalah dengan cara apa pun).sumber
Ini adalah konvensi dari logika yang tidak diketahui dan mungkin meragukan yang hadir sejak beta publik paling awal dari tahun 2007 ( Pratinjau B1 0.6.12383 ; diperlukan login).
Ini digunakan sebagai konvensi untuk memastikan bahwa kelas yang menjalankan kode pengaturan secara konsisten alias dalam skrip pengaturan. Sebagai contoh, walaupun kedua modul
Enterprise_GiftWrapping
danEnterprise_Rma
memiliki kelas pengaturan sendiri, masing-masing alias$installer
ke instanceMage_Catalog_Model_Resource_Setup
ketika menambahkan atribut ke entitas produk, misalnya:app / code / core / Enterprise / GiftWrapping / sql / enterprise_giftwrapping_setup / install-1.11.0.0.php
sumber
Satu hal yang saya sukai tentang penggunaan
$installer
yang benar-benar ingin saya tambahkan adalah membuatnya mudah untuk menggantinya dengan sesuatu yang lain atau menjalankannya di luar lingkup kelas.1. Menggantinya:
2. Lingkup luar:
Tentu saja dengan
data-upgrade-0.1.1-0.1.2.php
memiliki:Jadi ini mencegah
Fatal error: Using $this when not in object context
sumber
Saya kira itu dari hari-hari sebelumnya (<v.1.1). Tapi jujur saja, saya tidak tahu. Saya pikir ini sedikit lebih baik dibaca ...
Kamu tahu ;-)
sumber