Dans Magento 2, la plupart des classes ont ces deux méthodes de construction ( __constructet _construct). Quelle est la différence entre eux?
Dans Magento 2, la plupart des classes ont ces deux méthodes de construction ( __constructet _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 _constructsera appelé après le__construct
La __constructmé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 __constructpour 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), __constructest 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();
}