¿Cuándo deberías y cuándo no deberías usar wp_list_pluck ()?

10

Mientras aprendía sobre la carga diferida de metadatos, conocí estas líneas de código :

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

Pensé que se relaciona con este tema, pero no hay referencias aquí y el único foreachbucle está envuelto dentro de una función, ¿cómo puede ocurrir la manipulación por referencia en este caso?

Y, para la mejor práctica, ¿cuándo debemos usar la wp_list_pluck()función?

SarahCoding
fuente
Estoy contigo, fwiw. He mirado la fuente de funciones, los documentos de codex y dev y no puedo ver a qué se refiere ese comentario.
Andy Macaulay-Brook

Respuestas:

3

En cualquier foreachbucle, el último valor de la matriz que se repite permanece después del final del foreachbucle. Es por eso que uno siempre debe desarmar ese valor una vez que se completa el foreachciclo.

wp_list_pluck()también es solo un foreachciclo básico si $index_keyno se pasa. Además, como con cualquier foreachbucle, el último valor de la matriz permanece después del final del foreachbucle, y creo que a esto se refiere esa línea en el códice.

Sin embargo, esa suposición es incorrecta. Las funciones son piezas de código independientes y, a excepción de los globales, estas piezas de código dentro de una función solo están disponibles para la función misma. wp_list_pluck()no globaliza ninguno de sus valores internos ( variables ), por lo que incluso si el último valor de la matriz aún está disponible después del foreachciclo dentro de la función, y no se desarma, no está disponible para ningún fragmento de código fuera de la función, por lo que no puede tener el problema de pasar por referencia como se describe en esa línea en el códice.

wp_list_pluck()es tan válido para usar como cualquier foreachbucle simple . La elección depende de ti. Personalmente prefiero, wp_list_pluck()ya que ahorra en código, y no es necesario que recuerde desarmar las variables que luego pueden conducir a la depuración de la pesadilla.

Solo una nota final, wp_list_pluck()también puede reemplazar array_columnya que funciona igual si $index_keyse pasa a la función

Pieter Goosen
fuente
¿Desarmar o reiniciar?
fuxia
@toscho AFAIK y de lo que he aprendido, unset( $value )después de un foreachciclo, wp_reset_postdata()si lo usó setup_postdata( $post )en un foreachciclo, y reset() establece el puntero interno de nuevo al primer elemento de una matriz. Si me equivoco, o si tiene algo más o diferente que agregar, debe hacerlo en una respuesta para que todos nos beneficiemos de eso. En mi humilde opinión, esta es una pregunta de la que la mayoría de la comunidad puede beneficiarse, y si me equivoco, corríjame y publique una respuesta adecuada
Pieter Goosen