Dalam Magento 2, sebagian besar kelas memiliki dua metode konstruksi ( __constructdan _construct) ini. Apa perbedaan di antara mereka?
Dalam Magento 2, sebagian besar kelas memiliki dua metode konstruksi ( __constructdan _construct) ini. Apa perbedaan di antara mereka?
Jawaban:
Saya tidak sepenuhnya yakin apakah itu telah berubah antara Magento 1 dan Magento 2, mungkin tidak jadi saya akan pergi dengan apa yang saya ketahui dari Magento 1.
The _constructakan disebut setelah__construct
__constructMetode asli PHP tidak boleh ditimpa atau digunakan dalam kode Anda. Jika Anda ingin mengeksekusi kode dengan cara yang aman pada awal penggunaan kelas _construct.
Magento akan menggunakan yang asli __constructuntuk memastikan semuanya 'siap' untuk kelas yang akan digunakan seperti mendefinisikan tag cache yang tepat untuk model tertentu misalnya.
The _construct metode adalah "Varien penemuan" digunakan untuk membungkus beberapa logika inisialisasi dalam model, pembantu dan blok.
Jadi tidak biasa untuk mengubah atau mendeklarasikan ulang metode __construct () asli dalam Model / Blok M1 atau Pembantu karena kami selalu menggunakan pabrik Magento. Namun tidak ada masalah / praktik buruk tentang penggunaannya (jika Anda peduli kompatibilitas).
Dalam M2, metode _construct () masih ada di beberapa bagian dan digunakan untuk tujuan yang sama, tetapi sekarang (dalam M2) semua logika DI diimplementasikan oleh __constructor () sehingga Anda akan menemukan banyak deklarasi konstruk dalam basis kode.
BTW tidak ada lagi pabrik seperti Mage::getModel()di M2.
Dengan kata lain:
Metode _construct () diimplementasikan oleh Magento di beberapa kelas dan itu disebut secara otomatis di dalam deklarasi fungsi __construct , jadi jika Anda memperluas kelas Magento seperti Model, Anda dapat menggunakannya untuk melakukan beberapa hal setelah pembuatan objek.
Dalam Model Sumber Daya atau Model Kelas Anda harus mendefinisikan _construct()metode untuk mendefinisikan tabel dan primary_key
Di sisi lain, __construct adalah metode asli PHP (Semua bahasa OO memilikinya), __constructdipanggil setiap kali Anda membuat instance objek. Itu saja
Contoh:
Magento \ Framework \ Model \ ResourceModel \ AbstractResource
/**
* Abstract resource model
*/
abstract class AbstractResource
{
/**
* Main constructor
*/
public function __construct()
{
/**
* Please override this one instead of overriding real __construct constructor
*/
$this->_construct();
} ...
Magento \ Framework \ Model \ ResourceModel \ Db \ AbstractDb
/**
* Class constructor
*
* @param \Magento\Framework\Model\ResourceModel\Db\Context $context
* @param string $connectionName
*/
public function __construct(\Magento\Framework\Model\ResourceModel\Db\Context $context, $connectionName = null)
{
$this->transactionManager = $context->getTransactionManager();
$this->_resources = $context->getResources();
$this->objectRelationProcessor = $context->getObjectRelationProcessor();
if ($connectionName !== null) {
$this->connectionName = $connectionName;
}
parent::__construct();
}