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 foreach
loop 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?
functions
customization
SarahCoding
sumber
sumber
Jawaban:
Dalam
foreach
loop apa pun , nilai terakhir array yang dilingkarkan tetap setelah akhirforeach
loop. Itulah sebabnya kita harus selalu menghapus nilai itu setelahforeach
loop selesai.wp_list_pluck()
juga hanyaforeach
loop dasar jika$index_key
tidak dilewati. Juga, seperti halnyaforeach
loop, nilai terakhir array tetap setelah akhirforeach
loop, 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 setelahforeach
loop 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 sebagaiforeach
loop sederhana . Pilihannya terserah Anda. Saya pribadi lebih sukawp_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 menggantikanarray_column
karena berfungsi sama jika$index_key
dilewatkan ke fungsisumber
unset( $value )
setelah satuforeach
loop,wp_reset_postdata()
jika Anda digunakansetup_postdata( $post )
dalam satuforeach
loop, danreset()
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