Magento 2'de, sınıfların çoğu bu iki yapı ( __construct
ve _construct
) yöntemine sahiptir. Onların arasındaki fark ne?
Magento 2'de, sınıfların çoğu bu iki yapı ( __construct
ve _construct
) yöntemine sahiptir. Onların arasındaki fark ne?
Yanıtlar:
Magento 1 ve Magento 2 arasında değişip değişmediğinden tam olarak emin değilim, muhtemelen öyle değil, Magento 1'den bildiklerimle gideceğim.
_construct
Sonra adı verilecek__construct
PHP yerel __construct
yönteminin üzerine yazılmamalı veya kodunuzda kullanılmamalıdır. Sınıf kullanımının başında kodu güvenli bir şekilde yürütmek istiyorsanız _construct
.
Magento, __construct
örneğin belirli bir model için doğru önbellek etiketlerini tanımlamak gibi bir sınıfın kullanılabilmesi için her şeyin 'hazır' olduğundan emin olmak için yerel dili kullanacaktır .
_Construct yöntemi olarak "Varien buluş," modelleri, yardımcıları ve blok bazı başlatma mantık sarmak için kullanılan.
Her zaman Magento fabrikalarını kullandığımız için M1 Modelleri / Blokları veya Yardımcılarında yerel __construct () yöntemini değiştirmek veya yeniden bildirmek olağandışı bir durumdur . Bununla birlikte, kullanımıyla ilgili herhangi bir sorun / kötü uygulama değildir (uyumluluğa önem veriyorsanız).
M2 ise _construct () hala bazı yerlerinde bulunan ve aynı amaçlar için kullanılır, ama şimdi kod tabanı yapı bildirimleri bir sürü bulacaksınız bu yüzden tüm DI mantık __constructor () tarafından yürütülmektedir (M2) yöntemi.
BTW M2'de olduğu gibi fabrika yok Mage::getModel()
.
Diğer bir deyişle:
_Construct () metodu bazı sınıflarda Magento tarafından uygulanan ve içinde otomatik denir __construct size nesne oluşturulduktan sonra bazı şeyler gerçekleştirmek için kullanabileceğiniz bir model gibi Magento sınıfını genişleten eğer öyleyse, işlev bildirimi.
Kaynak Modeli veya Model Sınıfında _construct()
, tabloyu ve birincil_anahtarı tanımlamak için bir yöntem tanımlamanız gerekir
Öte yandan ise __construct bir olan yerli , PHP (Tüm OO dilleri birine sahip) yöntemi __construct
, bir nesnenin örneğini her zaman denir. Bu kadar
Misal:
Magento \ Framework \ Modeli \ 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 \ Modeli \ 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();
}