답변:
그것이 Magento 1과 Magento 2 사이에서 바뀌 었는지 확실하지 않습니다. 아마도 내가 Magento 1에서 아는 것과 함께 갈 것입니다.
는 _construct
애프터 호출됩니다__construct
__construct
코드에서 PHP 네이티브 메소드를 덮어 쓰거나 사용해서는 안됩니다. 클래스를 시작할 때 안전한 방법으로 코드를 실행하려면 사용하십시오 _construct
.
Magento는 네이티브 __construct
를 사용하여 특정 모델에 적합한 캐시 태그를 정의하는 등 클래스를 사용할 수 있도록 모든 것이 '준비'되도록합니다.
_construct의 방법은 있었다 "Varien 발명" 모델, 도우미 및 블록 일부 초기화 논리를 포장하는 데 사용됩니다.
따라서 항상 Magento 팩토리를 사용하므로 M1 모델 / 블록 또는 도우미에서 기본 __construct () 메서드 를 변경하거나 다시 선언하는 것은 드문 일 입니다. 그러나 호환성에 관심이 있다면 사용에 관한 문제 / 나쁜 습관은 아닙니다.
M2에서 _construct () 메소드는 여전히 일부 부분에 존재하며 동일한 목적으로 사용되지만 이제는 (M2에서) 모든 DI 로직이 __constructor ()에 의해 구현되므로 코드 기반에서 많은 구문 선언을 찾을 수 있습니다.
BTW Mage::getModel()
는 M2 와 같은 공장이 더 이상 없습니다 .
다른 말로:
_construct () 메소드는 어떤 클래스에 젠토에 의해 구현되며, 그것은 내부에서 자동으로 불리는 __construct의 당신은 당신이 개체를 생성 한 후 몇 가지 물건을 수행하는 데 사용할 수있는 모델과 같은 젠토 클래스를 확장하는 그렇다면, 함수 선언.
자원 모델 또는 모델 클래스 _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();
} ...
마 젠토 \ 프레임 워크 \ 모델 \ 리소스 모델 \ 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();
}