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

9

Enquanto aprendíamos sobre carregamento lento de metadados, eu conhecia esses 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;
        }
    }
} 

Achei que se trata de este tópico , mas não há referências aqui e o único foreach loop é empacotado dentro de uma função, como a manipulação por referência pode acontecer neste caso?

E, para prática recomendada, quando devemos usar a função wp_list_pluck() ?

    
por MinhTri 06.06.2016 / 13:18

1 resposta

3

Em qualquer loop foreach , o último valor da matriz sendo colocada em loop permanece após o final do loop foreach . É por isso que, na verdade, é preciso sempre desanexar esse valor depois que o loop foreach é feito.

wp_list_pluck() também é apenas um loop foreach básico se $index_key não for passado. Além disso, como em qualquer loop foreach , o último valor da matriz permanece após o final do loop foreach , e acho que é a isso que essa linha se refere no codex.

No entanto, essa suposição está errada. As Funções são partes independentes do código e, exceto para globals, essas partes do código dentro de uma função são apenas disponível para a função em si. wp_list_pluck() não globaliza nenhum de seus valores intenais ( variáveis ), portanto, mesmo se o último valor da matriz ainda estiver disponível após o loop foreach dentro da função e não ficar indefinido, não está disponível para qualquer parte do 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() é válido para usar como qualquer loop foreach simples. A escolha é sua. Eu pessoalmente prefiro o wp_list_pluck() , pois ele salva no código, e você não precisa se lembrar de variáveis não definidas que podem mais tarde levar ao pesadelo da depuração.

Apenas uma nota final, wp_list_pluck() também pode substituir array_column , pois funciona da mesma forma se $index_key for passado para a função

    
por Pieter Goosen 06.06.2016 / 13:43