In Magento 2, la maggior parte delle classi ha questi due metodi costrutti ( __construct
e _construct
). Qual'è la differenza tra loro?
In Magento 2, la maggior parte delle classi ha questi due metodi costrutti ( __construct
e _construct
). Qual'è la differenza tra loro?
Risposte:
Non sono completamente sicuro che sia cambiato tra Magento 1 e Magento 2, probabilmente no, quindi andrò con quello che so da Magento 1.
Il _construct
sarà chiamato dopo il__construct
Il __construct
metodo nativo PHP non deve essere sovrascritto o utilizzato nel codice. Se si desidera eseguire il codice in modo sicuro all'inizio di una lezione, utilizzare _construct
.
Magento utilizzerà il nativo __construct
per assicurarsi che tutto sia "pronto" per una classe da utilizzare, come ad esempio la definizione dei tag cache giusti per un determinato modello.
Il metodo _construct era una "invenzione di Varien" usata per avvolgere una logica di inizializzazione in modelli, helper e blocchi.
Quindi è insolito cambiare o ri-dichiarare il metodo nativo __construct () in M1 Modelli / Blocchi o Helpers poiché usiamo sempre le fabbriche Magento. Tuttavia, non c'è alcun problema / cattiva pratica nell'usarlo (se ti interessa la compatibilità).
In M2 il metodo _construct () è ancora presente in alcune parti e viene utilizzato per gli stessi scopi, ma ora (in M2) tutta la logica DI è implementata da __constructor () in modo da trovare molte dichiarazioni di costrutti nella base di codice.
A proposito non ci sono più fabbriche come Mage::getModel()
in M2.
In altre parole:
Il metodo _construct () è implementato da Magento in alcune classi e viene chiamato automaticamente all'interno della dichiarazione della funzione __construct , quindi se stai estendendo una classe Magento come un Modello puoi usarla per eseguire alcune cose dopo la creazione di oggetti.
In un modello di risorsa o in una classe di modello è necessario definire un _construct()
metodo per definire la tabella e la chiave primaria
D'altra parte, __construct è un metodo nativo di PHP (tutti i linguaggi OO ne hanno uno), __construct
viene chiamato ogni volta che si crea un'istanza di un oggetto. È tutto
Esempio:
Magento \ Framework \ modello \ 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 \ modello \ 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();
}