Kapan sebaiknya Anda, dan kapan sebaiknya tidak, gunakan wp_list_pluck ()?

10

Saat mempelajari tentang metadata lazy-loading, saya bertemu dengan baris kode berikut :

// 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;
        }
    }
} 

Saya pikir ini berkaitan dengan topik ini tetapi tidak ada referensi di sini dan satu-satunya foreachloop dibungkus di dalam suatu fungsi, bagaimana manipulasi referensi dapat terjadi dalam kasus ini?

Dan, untuk praktik terbaik, kapan kita harus menggunakan wp_list_pluck()fungsi?

SarahCoding
sumber
Aku bersamamu, fwiw. Saya telah melihat source function, codex & dev docs dan tidak bisa melihat apa yang dimaksud komentar itu.
Andy Macaulay-Brook

Jawaban:

3

Dalam foreachloop apa pun , nilai terakhir array yang dilingkarkan tetap setelah akhir foreachloop. Itulah sebabnya kita harus selalu menghapus nilai itu setelah foreachloop selesai.

wp_list_pluck()juga hanya foreachloop dasar jika $index_keytidak dilewati. Juga, seperti halnya foreachloop, nilai terakhir array tetap setelah akhir foreachloop, dan saya pikir ini adalah apa yang mengacu pada baris dalam codex.

Namun, anggapan itu salah. Fungsi adalah potongan-potongan kode mandiri, dan kecuali untuk global, potongan-potongan kode di dalam suatu fungsi hanya tersedia untuk fungsi itu sendiri. wp_list_pluck()tidak mengglobalkan nilai intenal ( variabel ) apa pun, sehingga meskipun nilai terakhir array masih tersedia setelah foreachloop di dalam fungsi, dan tidak disetel, itu tidak tersedia untuk setiap bagian kode di luar fungsi, jadi Anda tidak bisa memiliki masalah pass-by-reference seperti yang dijelaskan dalam baris itu dalam codex.

wp_list_pluck()valid untuk digunakan sebagai foreachloop sederhana . Pilihannya terserah Anda. Saya pribadi lebih suka wp_list_pluck()karena menghemat kode, dan Anda tidak perlu ingat untuk menghapus variabel yang nantinya dapat menyebabkan debugging mimpi buruk.

Hanya catatan akhir, wp_list_pluck()juga dapat menggantikan array_columnkarena berfungsi sama jika $index_keydilewatkan ke fungsi

Pieter Goosen
sumber
Batalkan atau atur ulang?
fuxia
@toscho AFAIK dan dari apa yang telah saya pelajari, unset( $value )setelah satu foreachloop, wp_reset_postdata()jika Anda digunakan setup_postdata( $post )dalam satu foreachloop, dan reset() menetapkan pointer internal kembali ke item pertama dalam sebuah array. Jika saya salah, atau jika Anda memiliki hal lain atau berbeda untuk ditambahkan, Anda harus melakukannya dalam jawaban sehingga kita semua mendapat manfaat dari itu. IMHO, ini adalah pertanyaan yang dapat dimanfaatkan sebagian besar masyarakat, dan jika saya salah, perbaiki saya dan kirimkan jawaban yang tepat
Pieter Goosen