web-dev-qa-db-fra.com

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

Tout en apprenant à propos du chargement paresseux 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 pas de référence ici et la seule boucle foreach est encapsulée dans une fonction. Comment une manipulation par référence peut-elle se produire dans ce cas?

Et, pour la meilleure pratique, quand devrions-nous utiliser la fonction wp_list_pluck()?

9
MinhTri

Dans toute boucle foreach, la dernière valeur du tableau en cours de bouclage reste après la fin de la boucle foreach. C’est pourquoi il est recommandé de toujours désélectionner cette valeur une fois la boucle foreach terminée.

wp_list_pluck() est également juste une boucle foreach de base si $index_key n'est pas transmis. En outre, comme pour toute boucle foreach, la dernière valeur du tableau reste après la fin de la boucle foreach, et je pense que c’est ce à quoi cette ligne fait référence dans le codex.

Cependant, cette hypothèse est fausse. Fonctions sont des éléments de code autonomes et, à l'exception des globaux, ces éléments de code dans une fonction ne sont disponibles que pour la fonction elle-même. wp_list_pluck() ne globalise aucune de ses valeurs initiales ( variables ). Ainsi, même si la dernière valeur du tableau est toujours disponible après la boucle foreach dans la fonction et si elle n'est pas définie, elle n'est pas disponible. n'importe quel morceau de code en dehors de la fonction, vous ne pouvez donc pas avoir le problème de passe-à-référence tel que décrit à cette ligne du codex.

wp_list_pluck() est aussi valide à utiliser que toute boucle foreach simple. Le choix vous appartient. Personnellement, je préfère wp_list_pluck() car cela économise du code, et vous n’avez pas besoin de vous rappeler d’effacer les variables qui peuvent par la suite conduire au cauchemar du débogage.

Juste une note finale, wp_list_pluck() peut également remplacer array_column car il fonctionne de la même manière si $index_key est passé à la fonction.

3
Pieter Goosen