এটি পর্যবেক্ষকের পরে ফিরছে


27

আমি ইন্টারনেটে এবং তৃতীয় পক্ষের মডিউলগুলিতে কিছু মতবিরোধী তথ্য দেখছি - $thisএকটি পর্যবেক্ষক পদ্ধতির শেষে ফিরে আসা কি কোনও প্রয়োজন বা সেরা অনুশীলন ?

উদাহরণ:

MyCompany_Module_Model_Observer.php

public function salesOrderSaveAfter($observer){
    //do stuff
    return $this;
}

উত্তর:


30

সবসময় মূল return $this;পর্যবেক্ষক পদ্ধতির প্রসঙ্গে - তবে আসলে এটির কোনও কারণ বলে মনে হয় না।

পিছনে অনুসরণ করে dispatchEvent()আপনি এমন প্রধান পদ্ধতিটি খুঁজে পাবেন যা পর্যবেক্ষক পদ্ধতিগুলিকে কল করে (ইন ./app/Core/Model/App.php)

protected function _callObserverMethod($object, $method, $observer)
{
    if (method_exists($object, $method)) {
        $object->$method($observer);
    } elseif (Mage::getIsDeveloperMode()) {
        Mage::throwException('Method "'.$method.'" is not defined in "'.get_class($object).'"');
    }
    return $this;
}

কিন্তু কোনও বিন্দুতে রিটার্নের মানটি আসলে ব্যবহৃত বা রেফারেন্স হিসাবে চেইনের নিচে অন্য পর্যবেক্ষকের কাছে পাঠানো হয়।

সম্ভবত ম্যাজেন্টো $thisসেশন / রেজিস্ট্রি ব্যবহারের বাইরে শ্রেণীর উদাহরণের মধ্যে ডেটা বজায় রাখা / পাস করার উপায় হিসাবে এটি ব্যবহার করার জন্য দীর্ঘমেয়াদী চিন্তা করছিল ; অথবা এটি লেগ্যাসি কোড হতে পারে যা কেবল আটকে গেছে

আমি এর জন্য একটি বাধ্যতামূলক কারণ দেখতে পাচ্ছি না return $this- তবে এটিই বলা হচ্ছে, যদি তারা এটি কাজটি করে তবে আমরা এটি করি।

একটি সাধারণ নিয়ম হিসাবে, মূল যাই হোক না কেন - আমরা সেরা অনুশীলন হিসাবে বিবেচনা করি। হতবাক বানান ভুল ব্যতীত :)


6
"ইউক্রিংলিশ" :-)
বেনমার্কগুলি

আমি স্বীকার করতে লজ্জা পেয়েছি যে আমি কখনও কখনও ফিরে
আসি un অব্যক্ত

@ ড্যানিয়েল - কেবল পর্যবেক্ষক স্বাক্ষরে পরম যুক্ত করবেন না। পিএইচপি আপত্তি নেই। তবে তারপরে, ভবিষ্যতে পাস করা পরমের প্রয়োজন হতে পারে।
নেভভারমাইন্ড

7

(এটিকে (পাং উদ্দেশ্যযুক্ত) বলা হয় সাবলীল ইন্টারফেস। এটি আপনাকে কোনও সংজ্ঞায়িত ভেরিয়েবলের পুনরায় উল্লেখ না করে কোনও অবজেক্টের মধ্যে একাধিক পদ্ধতিতে কল করার অনুমতি দেয়।


1
আপনাকে ধন্যবাদ - আমি সাবলীল ইন্টারফেস বুঝতে। আমি $thisযখন পর্যবেক্ষকদের অনর্গল ইন্টারফেসের জন্য সত্যিই কোনও ব্যবহার না করে তখন ফিরে আসার জন্য আমরা একটি বাধ্যতামূলক কারণ খুঁজছি ।
ফিলিঙ্কল

1
@ কেভিন - আপনার ম্যাজের পর্যবেক্ষকদের একটি সাবলীল ইন্টারফেসের দরকার নেই। আমি যে জানি না।
নেভভারমাইন্ড

5

এটি সর্বদা $thisপরিবর্তে ফিরে আসার জন্য একটি ম্যাজেন্টো সম্মেলনvoid কোনও পদ্ধতিতে অন্য কোনও রিটার্নের মান না থাকলে তা কেবল (কিছুই না) হোক না কেন, বাস্তবে এটি যে কোনও জায়গায় সাবলীল ইন্টারফেসের জন্য ব্যবহার করা হচ্ছে বা না কেন।

সুবিধাটি হ'ল, এটি কার্যকর কিনা না সে সম্পর্কে আপনার ভাবার দরকার নেই এবং একটি অতিমাত্রায় সাবলীল ইন্টারফেসটি অনুপস্থিতের চেয়ে ভাল। এছাড়াও, ম্যাজেন্টো তাদের পর্যবেক্ষকদের জন্য ব্যবহার শুরু করতে পারে , যদিও এটি অত্যন্ত সম্ভাবনা নয়।


0

কয়েক বছর পরে ... :)

মূল সর্বদা ফিরে আসে $ এটি; পর্যবেক্ষক পদ্ধতির প্রসঙ্গে - [...]

অথবা

সর্বদা ফিরে আসার জন্য এটি কেবল একটি ম্যাজেন্টো কনভেনশন $ যদি কোনও পদ্ধতিতে অন্য কোনও ফেরতের মান না থাকে তবে তা বাতিল (কিছু না) পরিবর্তে এটি [...]

সত্যিই না. ১.৯.৩.x এ কিছু পর্যবেক্ষককে সন্ধান করেছে এবং অনেক কিছুই কিছুই ফেরেনি ( void)। সুতরাং এটি "কোর কোড কী করে" সত্যই পরিষ্কার নয়;)

আমি আমার কোডটিও ব্যবহার করেছি $return $this;, তবে আজ - এম 1 কোডে কোনও পরিবর্তন হবে না - আমি এটি রেখে দেব। আমি মনে করি - যদি আমি অন্যের কোড পড়ি - একটি voidপদ্ধতি আরও পরিষ্কার হয় তবে অন্ধভাবে যুক্ত হওয়া একটি return $this, যা কখনও ব্যবহৃত হয় না।


সম্পাদনা:

যদি অ্যয়েসচেডুলার ব্যবহার করা হয় তবে আপনি ক্রোন ইতিহাসে এটি প্রদর্শন করতে stringবা ফিরিয়ে দিতে পারেন array

এখানে চিত্র বর্ণনা লিখুন

এই বৈশিষ্ট্যগুলির জন্য কোনও দস্তাবেজ খুঁজে পাওয়া যায় না ... সম্পর্কিত কোড এখানে: https://github.com/AOEpeople/Aoe_Scheduler/blob/master/app/code/commune/Aoe/Scheduler/odel/Schedule.php#L229- L259

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.