En apprenant le chargement différé des métadonnées, j'ai rencontré ces lignes de code :
// 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;
}
}
}
Je pensais que cela se rapportait à ce sujet, mais il n'y a aucune référence ici et la seule foreach
boucle est enveloppée dans une fonction, comment la manipulation par référence peut-elle se produire dans ce cas?
Et, pour les meilleures pratiques, quand devrions-nous utiliser la wp_list_pluck()
fonction?
functions
customization
SarahCoding
la source
la source
Réponses:
Dans n'importe quelle
foreach
boucle, la dernière valeur du tableau en boucle reste après la fin de laforeach
boucle. C'est pourquoi il faut en fait toujours effacer cette valeur une fois laforeach
boucle terminée.wp_list_pluck()
est également juste uneforeach
boucle de base si elle$index_key
n'est pas passée. De plus, comme pour touteforeach
boucle, la dernière valeur du tableau reste après la fin de laforeach
boucle, et je pense que c'est ce à quoi cette ligne fait référence dans le codex.Cependant, cette hypothèse est fausse. Les fonctions sont des morceaux de code autonomes, et à l'exception des globaux, ces morceaux de code à l'intérieur d'une fonction ne sont disponibles que pour la fonction elle-même.
wp_list_pluck()
ne mondialise aucune de ses valeurs intenales ( variables ), donc même si la dernière valeur du tableau est toujours disponible après laforeach
boucle à l'intérieur de la fonction, et n'est pas désactivée, elle n'est disponible pour aucun morceau de code en dehors de la fonction, vous ne pouvez donc pas avoir le problème de passage par référence comme décrit dans cette ligne dans le codex.wp_list_pluck()
est aussi valide à utiliser que n'importe quelleforeach
boucle simple . Le choix vous appartient. Personnellement, je préfèrewp_list_pluck()
car cela permet d'économiser du code, et vous n'avez pas besoin de vous rappeler de désactiver les variables qui peuvent plus tard conduire au débogage du cauchemar.Juste une note finale,
wp_list_pluck()
peut également remplacerarray_column
car il fonctionne de la même manière si$index_key
est passé à la fonctionla source
unset( $value )
après uneforeach
boucle,wp_reset_postdata()
si vous l'avez utilisésetup_postdata( $post )
dans uneforeach
boucle, etreset()
redéfinissez le pointeur interne sur le premier élément d'un tableau. Si je me trompe, ou si vous avez autre chose ou quelque chose de différent à ajouter, vous devriez le faire dans une réponse afin que nous en profitions tous. À mon humble avis, c'est une question dont la plupart de la communauté peut bénéficier, et si je me trompe, corrigez-moi alors et postez une réponse appropriée