Magento 2 में, अधिकांश कक्षाओं में ये दो निर्माण ( __construct
और _construct
) विधियां हैं। उनके बीच क्या अंतर है?
Magento 2 में, अधिकांश कक्षाओं में ये दो निर्माण ( __construct
और _construct
) विधियां हैं। उनके बीच क्या अंतर है?
जवाबों:
मुझे पूरी तरह से यकीन नहीं है कि अगर यह Magento 1 और Magento 2 के बीच बदल गया है, तो शायद मैं मैजेंटो 1 से जो कुछ भी जानता हूं उसके साथ नहीं जाऊंगा।
के _construct
बाद बुलाया जाएगा__construct
PHP देशी __construct
विधि को आपके कोड में अधिलेखित या उपयोग नहीं किया जाना चाहिए। यदि आप एक वर्ग उपयोग की शुरुआत पर सुरक्षित तरीके से कोड निष्पादित करना चाहते हैं _construct
।
Magento __construct
यह सुनिश्चित करने के लिए देशी का उपयोग करेगा कि एक वर्ग के लिए सब कुछ 'तैयार' है जैसे कि एक निश्चित मॉडल के लिए सही कैश टैग को परिभाषित करने के लिए उपयोग किया जाना चाहिए।
_Construct विधि एक था "Varien आविष्कार" मॉडल, सहायकों और ब्लॉकों में कुछ आरंभीकरण तर्क रैप करने के लिए इस्तेमाल किया।
इसलिए एम 1 मॉडल / ब्लॉक या हेल्पर्स में मूल __construct () विधि को बदलना या फिर से घोषित करना असामान्य है क्योंकि हम हमेशा मैगेंटो कारखानों का उपयोग करते हैं। हालांकि इसका उपयोग करने के बारे में कोई समस्या / बुरा-व्यवहार नहीं है (यदि आप संगतता का ध्यान रखते हैं)।
M2 में _construct () विधि अभी भी कुछ हिस्सों में मौजूद है और समान उद्देश्यों के लिए उपयोग की जाती है, लेकिन अब (M2 में) सभी DI तर्क __constructor () द्वारा कार्यान्वित किए जाते हैं, इसलिए आपको कोड बेस में बहुत सारी निर्माण घोषणाएं मिलेंगी।
बीटीडब्लू Mage::getModel()
में एम 2 की तरह अधिक फैक्ट्रियां नहीं हैं ।
दूसरे शब्दों में:
_Construct () विधि कुछ कक्षाओं में Magento द्वारा कार्यान्वित किया जाता है और इसके अंदर स्वचालित रूप से कहा जाता है __construct समारोह घोषणा, इसलिए यदि आप आप वस्तु निर्माण के बाद कुछ सामान प्रदर्शन करने के लिए उपयोग कर सकते हैं एक मॉडल की तरह एक Magento वर्ग का विस्तार कर रहे हैं।
संसाधन मॉडल या मॉडल क्लास में आपको _construct()
तालिका और प्राथमिक_की परिभाषा देने के लिए एक विधि निर्धारित करनी चाहिए
दूसरी ओर __construct PHP की एक मूल विधि है (सभी OO भाषाओं में एक है), __construct
हर बार जब आप किसी ऑब्जेक्ट को तुरंत कहते हैं। बस इतना ही
उदाहरण:
Magento \ फ्रेमवर्क \ मॉडल \ 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 \ फ्रेमवर्क \ मॉडल \ 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();
}