Enquanto aprendia sobre o carregamento lento de metadados, conheci estas linhas 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;
}
}
}
Eu pensei que se relaciona com este tópico, mas não há referências aqui e o único foreach
loop é envolvido dentro de uma função, como a manipulação por referência pode acontecer neste caso?
E, para as melhores práticas, quando devemos usar a wp_list_pluck()
função?
functions
customization
SarahCoding
fonte
fonte
Respostas:
Em qualquer
foreach
loop, o último valor da matriz sendo repetida permanece após o final doforeach
loop. É por isso que sempre se deve desarmar esse valor depois que oforeach
loop é concluído.wp_list_pluck()
também é apenas umforeach
loop básico se$index_key
não for passado. Além disso, como em qualquerforeach
loop, o último valor da matriz permanece após o final doforeach
loop, e acho que é a isso que essa linha se refere no codex.No entanto, essa suposição está errada. As funções são trechos de código independentes e, com exceção dos globais, esses trechos de código dentro de uma função estão disponíveis apenas para a própria função.
wp_list_pluck()
não globaliza nenhum de seus valores intenais ( variáveis ), portanto, mesmo que o último valor da matriz ainda esteja disponível após oforeach
loop dentro da função e não seja desmarcado, ele não estará disponível para nenhum trecho de código fora da função, portanto, você não pode ter o problema de passagem por referência, conforme descrito nessa linha no codex.wp_list_pluck()
é tão válido quanto qualquerforeach
loop simples . A escolha é sua. Pessoalmente, prefiro,wp_list_pluck()
pois ele economiza código, e você não precisa se lembrar de desarmar variáveis que podem levar a pesadelos de depuração.Apenas uma nota final,
wp_list_pluck()
também pode substituirarray_column
, pois funciona da mesma forma se$index_key
for passado para a funçãofonte
unset( $value )
depois de umforeach
loop,wp_reset_postdata()
se você o usousetup_postdata( $post )
em umforeach
loop, ereset()
configura o ponteiro interno de volta ao primeiro item de uma matriz. Se eu estiver errado, ou se você tiver algo mais ou diferente a acrescentar, faça isso em uma resposta para que todos nós nos beneficiemos disso. IMHO, esta é uma pergunta que a maioria da comunidade pode se beneficiar, e se eu estiver errado, me corrijam, em seguida, e postar uma resposta adequada