ส่งคืน $ นี้หลังจากผู้สังเกตการณ์


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
"Ukringlish" :-)
benmarks

ผมละอายใจที่จะยอมรับว่าบางครั้งผมกลับ $ สังเกตการณ์เพื่อกำจัด IDE เตือนของพารามิเตอร์ที่ไม่ได้ใช้ ...
แดเนียล Sloof

@Daniel - อย่าเพิ่งเพิ่มพารามิเตอร์ในลายเซ็นผู้สังเกตการณ์ PHP ไม่สนใจ แต่หลังจากนั้นอีกครั้งอาจจำเป็นต้องมีพารามิเตอร์ที่ผ่านในอนาคต
nevvermind

7

$ this (ตั้งใจปุน) เรียกว่าส่วนต่อประสานที่คล่องแคล่ว จะช่วยให้คุณสามารถเรียกวิธีการต่างๆภายในวัตถุโดยไม่ต้องอ้างอิงกลับไปที่ตัวแปรที่กำหนดไว้


1
ขอบคุณ - ฉันเข้าใจส่วนต่อประสานที่คล่องแคล่ว ฉันกำลังมองหาเหตุผลที่น่าสนใจที่จะกลับมา$thisเมื่อไม่มีการใช้อินเทอร์เฟซที่คล่องแคล่วกับผู้สังเกตการณ์
philwinkle

1
@Kevin - คุณไม่จำเป็นต้องมีส่วนต่อประสานที่คล่องแคล่วในผู้สังเกตการณ์ของ Mage ไม่ใช่ที่ฉันรู้
nevvermind

5

มันเป็นเพียงแค่การประชุมแบบวีโอไอพีที่จะส่งคืน$thisแทนที่จะเป็นvoid(ไม่มีอะไร) หากวิธีการนั้นไม่มีค่าตอบแทนอื่น ๆ

ข้อดีคือคุณไม่จำเป็นต้องคิดว่ามันมีประโยชน์หรือไม่และส่วนต่อประสานที่คล่องแคล่วว่องไวนั้นดีกว่าส่วนที่ขาดหายไป นอกจากนี้วีโอไอพีอาจเริ่มใช้พวกมันสำหรับผู้สังเกตการณ์แม้ว่าจะไม่น่าเป็นไปได้


0

หลายปีต่อมา ... :)

แกนจะส่งกลับ $ นี้เสมอ ในบริบทของวิธีการสังเกตการณ์ - [... ]

หรือ

มันเป็นเพียงการประชุมระดับวีโอไอพีที่จะคืนเงิน $ นี้แทนการเป็นโมฆะ (ไม่มีอะไร) หากวิธีการไม่มีค่าตอบแทนอื่น [... ]

ไม่มีจริงๆ. เพิ่งตรวจสอบผู้สังเกตการณ์บางคนใน 1.9.3.x และไม่มีอะไรคืนมาอีกมากมาย ( void) ดังนั้นจึงไม่ชัดเจนจริงๆ "รหัสหลักทำอะไร";)

ฉันใช้$return $this;ในรหัสของฉันด้วย แต่วันนี้ - จะไม่มีการเปลี่ยนแปลงในรหัส M1 - ฉันจะทิ้งไว้ ผมคิดว่า - ถ้าผมอ่านรหัสอื่น ๆ - เป็นvoidวิธีการที่มีความชัดเจนมากขึ้นแล้วหนึ่งที่มีเพิ่มสุ่มสี่สุ่มห้าreturn $thisนั่นคือไม่เคยใช้


แก้ไข:

หากใช้ Aoe_Scheduler คุณสามารถส่งคืนstringหรือarrayเพื่อแสดงในประวัติ cron

ป้อนคำอธิบายรูปภาพที่นี่

ไม่พบเอกสารใด ๆ สำหรับคุณสมบัตินี้ ... รหัสที่เกี่ยวข้องที่นี่: https://github.com/AOEpeople/Aoe_Scheduler/blob/master/app/code/community/Aoe/Scheduler/Model/Schedule.php#L229- L259

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.