Quando dovresti e quando non dovresti usare wp_list_pluck ()?


10

Durante l'apprendimento del caricamento lento dei metadati, ho incontrato queste righe di codice :

// 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;
        }
    }
} 

Ho pensato che riguardasse questo argomento, ma non ci sono riferimenti qui e l'unico foreachciclo è racchiuso in una funzione, come può accadere la manipolazione per riferimento in questo caso?

E, per le migliori pratiche, quando dovremmo usare la wp_list_pluck()funzione?


Sono con te, prima. Ho esaminato la fonte delle funzioni, il codice e i documenti dev e non riesco a vedere a cosa si riferisca quel commento.
Andy Macaulay-Brook,

Risposte:


3

In qualsiasi foreachloop, l'ultimo valore dell'array su cui viene eseguito il loop rimane dopo la fine del foreachloop. Questo è il motivo per cui si dovrebbe sempre disinserire quel valore dopo aver foreacheseguito il ciclo.

wp_list_pluck()è anche solo un foreachciclo di base se $index_keynon viene passato. Inoltre, come con qualsiasi foreachloop, l'ultimo valore dell'array rimane dopo la fine del foreachloop e penso che questo sia ciò a cui fa riferimento quella riga nel codice.

Tuttavia, tale presupposto è errato. Le funzioni sono parti di codice autonome e, ad eccezione dei globi, queste parti di codice all'interno di una funzione sono disponibili solo per la funzione stessa. wp_list_pluck()non globalizza nessuno dei suoi valori intenzionali ( variabili ), quindi anche se l'ultimo valore dell'array è ancora disponibile dopo il foreachciclo all'interno della funzione e non viene disinserito, non è disponibile per alcun pezzo di codice esterno alla funzione, quindi non puoi avere il problema del pass-by-reference come descritto in quella riga nel codice.

wp_list_pluck()è valido da usare come qualsiasi foreachciclo semplice . A te la scelta Personalmente preferisco wp_list_pluck()perché risparmia sul codice e non è necessario ricordare di annullare l'impostazione delle variabili che possono successivamente portare a un incubo di debug.

Solo un'ultima nota, wp_list_pluck()può anche sostituire array_columnpoiché funziona allo stesso modo se $index_keyviene passato alla funzione


Non impostato o resettato?
fuxia

@toscho AFAIK e da quello che ho imparato, unset( $value )dopo un foreachciclo, wp_reset_postdata()se hai usato setup_postdata( $post )in un foreachciclo, e reset() riporta il puntatore interno al primo elemento in un array. Se sbaglio, o se hai qualcos'altro o diverso da aggiungere, dovresti farlo in una risposta in modo che tutti ne traggiamo beneficio. IMHO, questa è una domanda di cui la maggior parte della comunità può beneficiare e, se sbaglio, correggimi e pubblica una risposta adeguata
Pieter Goosen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.