प्रेक्षक के बाद यह $ लौट रहा है


27

मुझे इंटरनेट पर और 3 पार्टी मॉड्यूल में कुछ परस्पर विरोधी जानकारी दिखाई देती है - क्या $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;
}

लेकिन किसी भी बिंदु पर वास्तव में उपयोग किए गए रिटर्न वैल्यू या चेन के नीचे किसी अन्य पर्यवेक्षक में पारित होने के लिए संदर्भित नहीं है।

शायद Magento $thisसत्र / रजिस्ट्री का उपयोग करने के बाहर वर्ग उदाहरण के भीतर डेटा को बनाए रखने / पास करने के लिए इसे कुछ साधनों के रूप में उपयोग करने के लिए लंबे समय तक सोच रहे थे ; या यह विरासत कोड हो सकता है जो अभी अटक गया है

मैं एक सम्मोहक कारण नहीं देख सकता return $this- लेकिन कहा जा रहा है, अगर वे इसे कोर में करते हैं, तो हम यही करते हैं।

एक सामान्य नियम के रूप में, जो कुछ भी कोर करता है - हम सबसे अच्छा अभ्यास करते हैं। चौंकाने वाली वर्तनी गलतियों के अपवाद के साथ :)


6
"उकिरिंग्लिश" :-)
17

मुझे यह स्वीकार करने में शर्म आती है कि मैं कभी-कभी अप्रयुक्त पैरामीटर की IDE चेतावनी से छुटकारा पाने के लिए $ पर्यवेक्षक लौटाता हूं ...
डैनियल स्लॉफ़

@ डैनियल - बस पर्यवेक्षक के हस्ताक्षर में परम को न जोड़ें। PHP मन नहीं है। लेकिन फिर, भविष्य में पारित परम की आवश्यकता हो सकती है।
नेवेरमाइंड

7

$ इस (दंडित उद्देश्य) को एक धाराप्रवाह इंटरफ़ेस कहा जाता है। यह आपको एक परिभाषित चर पर वापस जाने के बिना एक वस्तु के भीतर कई तरीकों को कॉल करने की अनुमति देता है।


1
धन्यवाद - मैं धाराप्रवाह इंटरफेस को समझता हूं। मैं लौटने के लिए एक सम्मोहक कारण की तलाश कर रहा हूं $thisजब पर्यवेक्षकों पर धाराप्रवाह इंटरफेस का वास्तव में कोई उपयोग नहीं है।
philwinkle

1
@ केविन - आपको मैज के पर्यवेक्षकों में एक धाराप्रवाह इंटरफ़ेस की आवश्यकता नहीं है। मेरी जानकारी में नहीं।
नेवरमाइंड

5

यह सिर्फ एक मैगेंटो सम्मेलन है (कुछ भी) के $thisबजाय हमेशा वापस जाने के लिए voidअगर किसी विधि का कोई अन्य रिटर्न मूल्य नहीं है, इसकी परवाह किए बिना वास्तव में कहीं भी एक धाराप्रवाह इंटरफ़ेस के लिए उपयोग किया जा रहा है।

लाभ यह है कि, आपको यह सोचने की ज़रूरत नहीं है कि यह उपयोगी है या नहीं, और एक शानदार धाराप्रवाह इंटरफ़ेस एक लापता से बेहतर है। इसके अलावा, Magento पर्यवेक्षकों के लिए उनका उपयोग करना शुरू कर सकता है , भले ही यह अत्यधिक संभावना न हो।


0

कुछ वर्षों के उपरांत ... :)

कोर हमेशा $ इसे वापस करता है; प्रेक्षक विधियों के संदर्भ में - [...]

या

यह सिर्फ एक Magento के सम्मेलन को हमेशा शून्य (कुछ भी) के बजाय $ वापस करने के लिए है अगर एक विधि का कोई अन्य वापसी मूल्य नहीं है [...]

सच में नहीं। बस 1.9.3.x में कुछ पर्यवेक्षकों की जाँच की और कई ने कुछ भी नहीं लौटाया ( void)। तो यह वास्तव में स्पष्ट नहीं है "कोर कोड क्या करता है";)

मैंने $return $this;अपने कोड में भी उपयोग किया है, लेकिन आज - M1 कोड में कोई बदलाव नहीं होगा - मैं इसे छोड़ दूँगा। मुझे लगता है - अगर मैं दूसरों के कोड को पढ़ता हूं - एक voidतरीका अधिक स्पष्ट है, तो एक आँख बंद करके जोड़ा जाता है return $this, इसका उपयोग कभी नहीं किया जाता है।


संपादित करें:

यदि Aoe_Scheduler का उपयोग कर रहे हैं, तो आप इसे क्रॉन इतिहास में प्रदर्शित करने के लिए stringया वापस भी कर सकते हैं array

यहाँ छवि विवरण दर्ज करें

इस सुविधाओं के लिए कोई भी डॉक्स नहीं मिल सकते ... संबंधित कोड यहां: https://github.com/AOEpeople/Aoe_Scheduler/blob/master/app/code/community/Aoe/Scheduler/Model-Schedule.php#L229- L259

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.