Magento 2では、ほとんどのクラスにこれらの2つの構造(__construct
および_construct
)メソッドがあります。それらの違いは何ですか?
Magento 2では、ほとんどのクラスにこれらの2つの構造(__construct
および_construct
)メソッドがあります。それらの違いは何ですか?
回答:
Magento 1とMagento 2の間で変更されたかどうかは完全にはわかりませんが、おそらくそうではないので、Magento 1で知っていることを使用します。
_construct
後に呼び出されます__construct
PHPネイティブ__construct
メソッドを上書きしたり、コードで使用したりしないでください。クラスの開始時に安全な方法でコードを実行する場合は、を使用します_construct
。
Magentoはネイティブ__construct
を使用して、たとえば特定のモデルに適切なキャッシュタグを定義するなど、使用するクラスに対してすべてが「準備完了」であることを確認します。
_constructの方法だった「Varienの発明」モデル、ヘルパーやブロックにいくつかの初期化ロジックをラップするために使用されます。
したがって、Magentoファクトリーを常に使用するため、M1モデル/ブロックまたはヘルパーでネイティブ__construct()メソッドを変更または再宣言することはまれです。ただし、それを使用することについての問題/悪い練習ではありません(互換性を気にする場合)。
M2では_construct()メソッドが一部に存在し、同じ目的で使用されますが、現在(M2では)すべてのDIロジックが__constructor()によって実装されているため、コードベースで多くの構成体宣言を見つけることができます。
ところでMage::getModel()
、M2のような工場はもうありません。
言い換えると:
_construct()メソッドは、いくつかのクラスにMagentoので実装され、それは内部で自動的に呼び出されます__constructのあなたは、オブジェクトの作成後にいくつかのものを実行するためにそれを使用することができますモデルのようなMagentoのクラスを拡張しているのであれば、関数宣言。
リソースモデルまたはモデルクラスで_construct()
は、テーブルとprimary_keyを定義するためにメソッドを定義する必要があります
一方、__ constructはPHPのネイティブメソッド(すべてのOO言語にあります)で__construct
あり、オブジェクトをインスタンス化するたびに呼び出されます。それで全部です
例:
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();
}