Magento2 এ __ কনস্ট্রাক্ট এবং _ কনস্ট্রাক্ট কী?


21

ম্যাজেন্টো 2 এ, বেশিরভাগ ক্লাসে এই দুটি কনস্ট্রাক্ট ( __constructএবং _construct) পদ্ধতি রয়েছে। তাদের মধ্যে পার্থক্য কী?

উত্তর:


17

আমি পুরোপুরি নিশ্চিত নই যে এটি ম্যাজেন্টো 1 এবং ম্যাজেন্টো 2 এর মধ্যে পরিবর্তিত হয়েছে কিনা, সম্ভবত তাই না তবে আমি ম্যাজেন্টো 1 থেকে যা জানি তার সাথে যাব।

এর _constructপরে ডাকা হবে__construct

পিএইচপি নেটিভ __constructপদ্ধতিটি আপনার কোডটিতে ওভাররাইট বা ব্যবহার করা উচিত নয়। আপনি যদি কোনও শ্রেণি ব্যবহার শুরু করার সময় সুরক্ষিত উপায়ে কোড সম্পাদন করতে চান _construct

ম্যাজেন্টো __constructকোনও শ্রেণীর জন্য যেমন কিছু নির্দিষ্ট মডেলের জন্য ডান ক্যাশে ট্যাগগুলি সংজ্ঞায়িত করার জন্য ব্যবহৃত হয় তার জন্য সবকিছু 'প্রস্তুত' তা নিশ্চিত করতে নেটিভ ব্যবহার করবেন ।


15

_Construct পদ্ধতি ছিল "Varien উদ্ভাবন" মডেল, সাহায্যকারী এবং ব্লক কিছু আরম্ভের যুক্তিবিজ্ঞান মোড়ানো করতেন।

সুতরাং এম 1 মডেল / ব্লক বা হেল্পার্সে নেটিভ __ কনস্ট্রাক্ট () পদ্ধতিটি পরিবর্তন বা পুনরায় ঘোষণা করা অস্বাভাবিক, যেহেতু আমরা সবসময় ম্যাজেন্টো কারখানাগুলি ব্যবহার করি। তবে এটি ব্যবহার সম্পর্কে কোনও সমস্যা / খারাপ-অনুশীলন নয় (যদি আপনি সামঞ্জস্যের যত্ন নেন)।

এম 2-তে _ কনস্ট্রাক্ট () পদ্ধতিটি এখনও কিছু অংশে উপস্থিত রয়েছে এবং একই উদ্দেশ্যে ব্যবহৃত হয়, তবে এখন (এম 2) সমস্ত ডিআই যুক্তি __ কনস্ট্রাক্টর () দ্বারা প্রয়োগ করা হয় যাতে আপনি কোড বেসে অনেকগুলি কনস্ট্রাকশন ঘোষণার সন্ধান পাবেন।

বিটিডব্লিউ Mage::getModel()এম 2 এর মতো আর কারখানা নেই ।

অন্য কথায়:

_Construct () পদ্ধতি কিছু ক্লাসের Magento দ্বারা বাস্তবায়িত হয় এবং এটি ভিতরে স্বয়ংক্রিয়ভাবে বলা হচ্ছে __construct ফাংশন ঘোষণা, তাই যদি আপনি বস্তুর সৃষ্টি পরে কিছু কাপড় সম্পাদন করতে এটি ব্যবহার করতে পারেন একটি মডেল মত একটি Magento বর্গ ব্যাপ্ত হয়।

কোনও রিসোর্স মডেল বা মডেল ক্লাসে আপনাকে _construct()সারণী এবং প্রাথমিক_কিটি সংজ্ঞায়িত করার জন্য একটি পদ্ধতি নির্ধারণ করতে হবে

অন্যদিকে __ কনস্ট্রাক্ট হ'ল পিএইচপি-র একটি স্থানীয় পদ্ধতি (সমস্ত ওও ভাষাগুলির একটি থাকে), __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 \ ডেটাবেস \ 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();
}

আপনি দয়া করে উদাহরণ দিতে পারেন?
জেড ব্ল্যাকবার্ড

এম 2 তে? পার্থক্যটি আরও স্পষ্ট করার জন্য আমি উত্তরটি আরও উন্নত করতে পারি, তবে উদাহরণের প্রয়োজন কিনা তা আমি জানি না,
মুরোনিগ্রিল

আমি ডিআই এবং __ কনস্ট্রাক্ট () সম্পর্কিত কিছু বিষয়ে আপনার মতামত নিয়ে আগ্রহী। দেখে মনে হচ্ছে যে ম্যাজেন্টো 2-তে তথাকথিত "ডিআই লজিক" প্রয়োগ করা হয়েছে, বিরোধী নিদর্শন হিসাবে, যেহেতু এটি প্রকৃতপক্ষে শক্ত সংযোগ তৈরি করে। আপনার মডিউলগুলির সাথে আপনি কত 3 ডি পার্টি মডিউলগুলি প্রসারিত করেছেন তার উপর নির্ভর করে একটি সুরকার আপডেট চালানো, প্রায়ই অ্যাপ্লিকেশনটি চালিয়ে যাওয়ার জন্য প্রায়শই ডিবাগ করা, নির্মাণকারীদের মধ্যে প্যারাম যুক্ত করতে পারে। এটিকে এমনকি "নির্ভরতা ইনজেকশন" বলা যেতে পারে তা নিশ্চিত নন, তবে নির্ভরতা অ্যাঙ্করিং বা
কোনও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.