เมื่อใดที่คุณควรและเมื่อใดที่ไม่ควรใช้ wp_list_pluck ()?


10

ขณะเรียนรู้เกี่ยวกับการโหลดเมตาดาต้าที่ขี้เกียจฉันพบโค้ดเหล่านี้ :

// Don't use `wp_list_pluck()` to avoid by-reference manipulation.
$comment_ids = array();
if ( is_array( $comments ) ) {
    foreach ( $comments as $comment ) {
        if ( $comment instanceof WP_Comment ) {
            $comment_ids[] = $comment->comment_ID;
        }
    }
} 

ฉันคิดว่ามันเกี่ยวข้องกับหัวข้อนี้แต่ไม่มีการอ้างอิงที่นี่และมีforeachลูปเดียวเท่านั้นภายในฟังก์ชันการจัดการโดยอ้างอิงอ้างอิงสามารถเกิดขึ้นได้อย่างไรในกรณีนี้

และเพื่อการปฏิบัติที่ดีที่สุดเราควรใช้wp_list_pluck()ฟังก์ชั่นเมื่อไหร่?


ฉันอยู่กับคุณ fwiw ฉันดูที่ฟังก์ชันแล้วตัวแปลงสัญญาณ & dev เอกสารและไม่สามารถดูความคิดเห็นที่อ้างถึงได้
Andy Macaulay-Brook

คำตอบ:


3

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

wp_list_pluck()เป็นเพียงforeachลูปพื้นฐานถ้า$index_keyไม่ผ่าน เช่นเดียวกับforeachลูปใด ๆค่าสุดท้ายของอาเรย์ยังคงอยู่หลังจากสิ้นสุดforeachลูปและฉันคิดว่านี่คือสิ่งที่บรรทัดนั้นอ้างถึงในโคเด็กซ์

อย่างไรก็ตามข้อสันนิษฐานนั้นผิด ฟังก์ชั่นคือชิ้นส่วนของโค้ดที่มีอยู่ในตัวเองและยกเว้นสำหรับ globals ชิ้นส่วนของโค้ดเหล่านี้ภายในฟังก์ชั่นนั้นสามารถใช้งานได้กับฟังก์ชั่นเท่านั้น wp_list_pluck()ไม่ทำให้ค่า intenal ( ตัวแปร ) เป็นค่าโกลบอลดังนั้นแม้ว่าค่าสุดท้ายของอาร์เรย์จะยังคงมีอยู่หลังจากforeachวนลูปภายในฟังก์ชันและไม่ได้รับการตั้งค่ามันจะไม่สามารถใช้ได้กับโค้ดใด ๆ นอกฟังก์ชัน ดังนั้นคุณไม่สามารถมีปัญหาการอ้างอิงผ่านตามที่อธิบายไว้ในบรรทัดนั้นใน codex

wp_list_pluck()ใช้ได้เช่นเดียวกับการforeachวนรอบแบบง่าย ๆ ทางเลือกขึ้นอยู่กับคุณ ฉันชอบwp_list_pluck()มันเป็นการประหยัดรหัสและคุณไม่จำเป็นต้องจำเพื่อยกเลิกการตั้งค่าตัวแปรซึ่งสามารถนำไปสู่การแก้จุดบกพร่องฝันร้ายในภายหลัง

เพียงบันทึกย่อสุดท้ายwp_list_pluck()ยังสามารถแทนที่array_columnได้เหมือนเดิมหาก$index_keyส่งผ่านไปยังฟังก์ชัน


เลิกตั้งหรือรีเซ็ต
fuxia

@toscho AFAIK และจากสิ่งที่ฉันได้เรียนรู้unset( $value )หลังจากforeachลูป wp_reset_postdata()ถ้าคุณใช้setup_postdata( $post )ในการforeachวนซ้ำและreset() ตั้งค่าตัวชี้ภายในกลับไปที่รายการแรกในอาร์เรย์ ถ้าฉันผิดหรือถ้าคุณมีอะไรอื่นเพิ่มหรือแตกต่างคุณควรทำอย่างนั้นในคำตอบเพื่อให้เราทุกคนได้รับประโยชน์จากสิ่งนั้น IMHO นี่เป็นคำถามที่ชุมชนส่วนใหญ่ได้รับประโยชน์และถ้าฉันผิดให้แก้ไขฉันแล้วโพสต์คำตอบที่ถูกต้อง
Pieter Goosen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.