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 foreach
bucle 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?
functions
customization
SarahCoding
fuente
fuente
Respuestas:
En cualquier
foreach
bucle, el último valor de la matriz que se repite permanece después del final delforeach
bucle. Es por eso que uno siempre debe desarmar ese valor una vez que se completa elforeach
ciclo.wp_list_pluck()
también es solo unforeach
ciclo básico si$index_key
no se pasa. Además, como con cualquierforeach
bucle, el último valor de la matriz permanece después del final delforeach
bucle, 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 delforeach
ciclo 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 cualquierforeach
bucle 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 reemplazararray_column
ya que funciona igual si$index_key
se pasa a la funciónfuente
unset( $value )
después de unforeach
ciclo,wp_reset_postdata()
si lo usósetup_postdata( $post )
en unforeach
ciclo, yreset()
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