Ucząc się o leniwym ładowaniu metadanych, poznałem następujące wiersze kodu :
// 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;
}
}
}
Myślałem, że odnosi się to do tego tematu, ale nie ma tu żadnych odniesień, a jedyna foreach
pętla jest owinięta wewnątrz funkcji. Jak w takim przypadku może dojść do manipulacji przez odniesienie?
A dla najlepszej praktyki, kiedy powinniśmy korzystać z wp_list_pluck()
funkcji?
functions
customization
SarahCoding
źródło
źródło
Odpowiedzi:
W dowolnej
foreach
pętli ostatnia wartość zapętlonej tablicy pozostaje po jej zakończeniuforeach
. Właśnie dlatego zawsze należy zresetować tę wartość po zakończeniuforeach
pętli.wp_list_pluck()
jest również podstawowąforeach
pętlą, jeśli$index_key
nie zostanie przekazana. Podobnie jak w przypadku każdejforeach
pętli ostatnia wartość tablicy pozostaje po jej zakończeniuforeach
i myślę, że do tego właśnie odnosi się ta linia w kodeksie.To założenie jest jednak błędne. Funkcje są samodzielnymi fragmentami kodu i oprócz globali te fragmenty kodu wewnątrz funkcji są dostępne tylko dla samej funkcji.
wp_list_pluck()
nie globalizuje żadnej ze swoich wartości wewnętrznych ( zmiennych ), więc nawet jeśli ostatnia wartość tablicy jest nadal dostępna poforeach
pętli wewnątrz funkcji i nie zostanie rozbrojona, nie jest dostępna dla żadnego kodu poza funkcją, więc nie możesz mieć problemu z przejściem przez odniesienie, jak opisano w tym wierszu w kodeksie.wp_list_pluck()
jest równie poprawny w użyciu, jak każda prostaforeach
pętla. Wybór należy do ciebie. Ja osobiście wolę,wp_list_pluck()
ponieważ oszczędza to kod i nie musisz pamiętać o rozbrajaniu zmiennych, które później mogą prowadzić do debugowania koszmaru.Tylko ostatnia uwaga,
wp_list_pluck()
może również zastąpić,array_column
ponieważ działa tak samo, jeśli$index_key
zostanie przekazana do funkcjiźródło
unset( $value )
poforeach
pętli,wp_reset_postdata()
jeśli używałeśsetup_postdata( $post )
wforeach
pętli, ireset()
ustawia wewnętrzny wskaźnik z powrotem na pierwszy element w tablicy. Jeśli się mylę lub jeśli masz coś innego lub innego do dodania, powinieneś to zrobić w odpowiedzi, aby wszyscy mogli z tego skorzystać. IMHO, jest to pytanie, z którego może skorzystać większość społeczności, a jeśli się mylę, popraw mnie i opublikuj poprawną odpowiedź