Quand devriez-vous et quand ne devriez-vous pas utiliser wp_list_pluck ()?

10

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 foreachboucle 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?

SarahCoding
la source
Je suis avec toi, fwiw. J'ai regardé la source de la fonction, les documents codex et dev et je ne vois pas à quoi ce commentaire fait référence.
Andy Macaulay-Brook

Réponses:

3

Dans n'importe quelle foreachboucle, la dernière valeur du tableau en boucle reste après la fin de la foreachboucle. C'est pourquoi il faut en fait toujours effacer cette valeur une fois la foreachboucle terminée.

wp_list_pluck()est également juste une foreachboucle de base si elle $index_keyn'est pas passée. De plus, comme pour toute foreachboucle, la dernière valeur du tableau reste après la fin de la foreachboucle, 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 la foreachboucle à 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 quelle foreachboucle simple . Le choix vous appartient. Personnellement, je préfère wp_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 remplacer array_columncar il fonctionne de la même manière si $index_keyest passé à la fonction

Pieter Goosen
la source
Désactiver ou réinitialiser?
fuxia
@toscho AFAIK et d'après ce que j'ai appris, unset( $value )après une foreachboucle, wp_reset_postdata()si vous l'avez utilisé setup_postdata( $post )dans une foreachboucle, et reset() 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
Pieter Goosen