Quando você deve e quando não deve usar wp_list_pluck ()?

10

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 foreachloop é 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?

SarahCoding
fonte
Estou com você, Fwiw. Eu olhei para a fonte da função, codex e dev docs e não consigo ver a que esse comentário se refere.
Andy Macaulay-Brook

Respostas:

3

Em qualquer foreachloop, o último valor da matriz sendo repetida permanece após o final do foreachloop. É por isso que sempre se deve desarmar esse valor depois que o foreachloop é concluído.

wp_list_pluck()também é apenas um foreachloop básico se $index_keynão for passado. Além disso, como em qualquer foreachloop, o último valor da matriz permanece após o final do foreachloop, 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 o foreachloop 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 qualquer foreachloop 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 substituir array_column, pois funciona da mesma forma se $index_keyfor passado para a função

Pieter Goosen
fonte
Desativar ou redefinir?
Fuxia
@toscho AFAIK e pelo que aprendi, unset( $value )depois de um foreachloop, wp_reset_postdata()se você o usou setup_postdata( $post )em um foreachloop, e reset() 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
Pieter Goosen