Câu trả lời:
Tôi không hoàn toàn chắc chắn nếu nó đã thay đổi giữa Magento 1 và Magento 2, có lẽ không vì vậy tôi sẽ đi với những gì tôi biết từ Magento 1.
Các _construct
sẽ được gọi sau khi__construct
__construct
Phương thức gốc PHP không nên được ghi đè hoặc sử dụng trong mã của bạn. Nếu bạn muốn thực thi mã theo cách an toàn khi bắt đầu sử dụng lớp _construct
.
Magento sẽ sử dụng nguồn gốc __construct
để đảm bảo mọi thứ đều 'sẵn sàng' cho một lớp được sử dụng, chẳng hạn như xác định các thẻ bộ nhớ cache đúng cho một mô hình nhất định chẳng hạn.
Các _construct phương pháp là một "Varien phát minh" dùng để quấn một số logic khởi trong các mô hình, những người giúp đỡ và khối.
Vì vậy, việc thay đổi hoặc khai báo lại phương thức __construct () trong Mô hình / Khối hoặc Người trợ giúp của M1 là điều bất thường vì chúng tôi luôn sử dụng các nhà máy Magento. Tuy nhiên, không có bất kỳ vấn đề / thực tiễn xấu nào về việc sử dụng nó (nếu bạn quan tâm đến tính tương thích).
Trong M2, phương thức _construct () vẫn có trong một số phần và được sử dụng cho cùng mục đích, nhưng bây giờ (trong M2), tất cả logic DI được thực hiện bởi __constructor () vì vậy bạn sẽ tìm thấy rất nhiều khai báo cấu trúc trong cơ sở mã.
BTW không có nhiều nhà máy như Mage::getModel()
ở M2.
Nói cách khác:
Phương thức _construct () được Magento triển khai trong một số lớp và nó được gọi tự động bên trong khai báo hàm __construct , vì vậy nếu bạn đang mở rộng một lớp Magento như Mô hình, bạn có thể sử dụng nó để thực hiện một số nội dung sau khi tạo đối tượng.
Trong Mô hình tài nguyên hoặc Lớp mô hình, bạn nên xác định một _construct()
phương thức để xác định bảng và tệp chính_key
Mặt khác, __construct là một phương thức gốc của PHP (Tất cả các ngôn ngữ OO đều có một), __construct
được gọi mỗi khi bạn khởi tạo một đối tượng. Đó là tất cả
Thí dụ:
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();
}