คำถามติดแท็ก method-chaining

8
วิธีการผูกมัด PHP?
ฉันใช้ PHP 5 และฉันเคยได้ยินเรื่องใหม่เกี่ยวกับวิธีการเชิงวัตถุที่เรียกว่า 'การโยงวิธีการ' มันคืออะไรกันแน่? ฉันจะใช้งานได้อย่างไร
170 php  oop  method-chaining 

18
วิธีการผูกมัด - ทำไมมันเป็นการปฏิบัติที่ดีหรือไม่?
วิธีการผูกมัดคือการปฏิบัติของวิธีการวัตถุกลับวัตถุเองเพื่อให้ผลที่จะเรียกวิธีอื่น แบบนี้: participant.addSchedule(events[1]).addSchedule(events[2]).setStatus('attending').save() สิ่งนี้น่าจะถือเป็นแนวปฏิบัติที่ดีเนื่องจากมันสร้างโค้ดที่อ่านได้หรือ "ส่วนต่อประสานที่คล่องแคล่ว" อย่างไรก็ตามสำหรับฉันแล้วมันดูเหมือนว่าจะทำลายสัญกรณ์การโทรวัตถุที่บอกเป็นนัยโดยการวางแนววัตถุเอง - โค้ดผลลัพธ์ไม่ได้แสดงถึงการดำเนินการกับผลลัพธ์ของวิธีการก่อนหน้านี้ซึ่งเป็นวิธีที่รหัสเชิงวัตถุโดยทั่วไปคาดว่าจะทำงาน: participant.getSchedule('monday').saveTo('monnday.file') ความแตกต่างนี้จัดการเพื่อสร้างความหมายที่แตกต่างกันสองแบบสำหรับเครื่องหมายจุดของ "การเรียกอ็อบเจกต์ผลลัพธ์": ในบริบทของการโยงโซ่ตัวอย่างข้างต้นจะอ่านเป็นการบันทึกออบเจ็กต์ผู้เข้าร่วมแม้ว่าตัวอย่างนั้นตั้งใจจะบันทึกกำหนดการ วัตถุที่ได้รับจาก getSchedule ฉันเข้าใจว่าความแตกต่างที่นี่คือว่าวิธีการที่เรียกว่าควรจะคาดหวังที่จะคืนบางสิ่งบางอย่างหรือไม่ แต่ทั้งสองกรณีนี้ไม่สามารถแยกความแตกต่างจากสัญกรณ์เองได้เฉพาะจากความหมายของวิธีการที่ถูกเรียก เมื่อไม่มีการใช้การโยงวิธีฉันสามารถทราบได้เสมอว่าการเรียกใช้เมธอดดำเนินการกับบางสิ่งที่เกี่ยวข้องกับผลลัพธ์ของการโทรก่อนหน้า - ด้วยการผูกมัดการสันนิษฐานนี้แบ่งและฉันต้องประมวลผลทั้งโซ่เพื่อเข้าใจว่าวัตถุจริง ๆ เรียกว่าเป็นจริง ตัวอย่างเช่น: participant.attend(event).setNotifications('silent').getSocialStream('twitter').postStatus('Joining '+event.name).follow(event.getSocialId('twitter')) ที่นั่นการเรียกเมธอดสองวิธีสุดท้ายอ้างถึงผลลัพธ์ของ getSocialStream ในขณะที่วิธีการก่อนที่จะอ้างถึงผู้เข้าร่วม อาจเป็นวิธีที่ไม่ถูกต้องในการเขียนเชนที่บริบทเปลี่ยนไป (ใช่หรือไม่) แต่ถึงอย่างนั้นคุณจะต้องตรวจสอบอย่างต่อเนื่องว่าดอทเชนที่มีลักษณะคล้ายกันนั้นอยู่ในบริบทเดียวกันหรือไม่ . สำหรับฉันแล้วดูเหมือนว่าในขณะที่วิธีการผูกมัดแบบผิวเผินจะสร้างโค้ดที่อ่านได้ แต่การโหลดมากเกินไปความหมายของเครื่องหมายจุดจะส่งผลให้เกิดความสับสนมากขึ้นเท่านั้น เมื่อฉันไม่พิจารณาตัวเองเป็นกูรูการเขียนโปรแกรมฉันถือว่าความผิดนั้นเป็นของฉัน ดังนั้นสิ่งที่ฉันหายไป? ฉันเข้าใจวิธีการผูกมัดอย่างผิดหรือเปล่า? มีบางกรณีที่วิธีการผูกมัดที่ดีเป็นพิเศษหรือบางกรณีที่แย่มากโดยเฉพาะ? Sidenote: ฉันเข้าใจว่าคำถามนี้สามารถอ่านได้ในฐานะที่เป็นข้อความแสดงความคิดเห็นที่หลอกลวงว่าเป็นคำถาม อย่างไรก็ตามมันไม่ใช่ - ฉันต้องการเข้าใจอย่างแท้จริงว่าทำไมการผูกมัดถือเป็นแนวปฏิบัติที่ดีและฉันจะไปผิดที่โดยคิดว่ามันจะทำลายสัญกรณ์เชิงวัตถุโดยธรรมชาติ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.