Dans Magento 2, la plupart des classes ont ces deux méthodes de construction ( __construct
et _construct
). Quelle est la différence entre eux?
Dans Magento 2, la plupart des classes ont ces deux méthodes de construction ( __construct
et _construct
). Quelle est la différence entre eux?
Réponses:
Je ne suis pas complètement sûr si cela a changé entre Magento 1 et Magento 2, probablement pas, donc je vais continuer avec ce que je sais de Magento 1.
Le _construct
sera appelé après le__construct
La __construct
méthode native PHP ne doit pas être écrasée ou utilisée dans votre code. Si vous souhaitez exécuter du code de manière sûre au début d'une classe, utilisez _construct
.
Magento utilisera le natif __construct
pour s'assurer que tout est «prêt» pour une classe à utiliser, comme la définition des bonnes balises de cache pour un certain modèle par exemple.
La méthode _construct était une "invention de Varien" utilisée pour encapsuler une logique d'initialisation dans des modèles, des assistants et des blocs.
Il est donc inhabituel de modifier ou de re-déclarer la méthode native __construct () dans les modèles / blocs M1 ou les assistants, car nous utilisons toujours les usines Magento. Cependant, il n'y a aucun problème / mauvaise pratique à l'utiliser (si vous vous souciez de la compatibilité).
Dans M2, la méthode _construct () est toujours présente dans certaines parties et est utilisée aux mêmes fins, mais maintenant (dans M2) toute la logique DI est implémentée par le __constructor (), vous trouverez donc beaucoup de déclarations de construction dans la base de code.
BTW il n'y a plus d'usines comme Mage::getModel()
au M2.
En d'autres termes:
La méthode _construct () est implémentée par Magento dans certaines classes et elle est appelée automatiquement dans la déclaration de fonction __construct , donc si vous étendez une classe Magento comme un modèle, vous pouvez l'utiliser pour effectuer des tâches après la création d'objet.
Dans un modèle de ressource ou une classe de modèle, vous devez définir une _construct()
méthode afin de définir la table et la clé_principale
En revanche, le __construct est une méthode native de PHP (tous les langages OO en ont un), __construct
est appelé chaque fois que vous instanciez un objet. C'est tout
Exemple:
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();
}