web-dev-qa-db-ja.com

Wp_list_pluck()を使うべきなのはいつですか?

メタデータの遅延ロードについて学びながら、私は これらのコード行 に出会いました - /:

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

このトピック に関連があると思いましたが、ここで参照はなく、唯一のforeachループが関数内にラップされていますが、この場合は参照による操作がどのように起こるのでしょうか。

そして、ベストプラクティスとして、いつwp_list_pluck()関数を使うべきですか?

9
MinhTri

どのforeachループでも、ループされる配列の最後の値はforeachループの終了後に残ります。 foreachループが行われた後に実際には常にその値を設定解除すべきであるのはそのためです。

$index_keyが渡されない場合、 wp_list_pluck() も単なる基本的なforeachループです。また、他のforeachループと同様に、配列の最後の値はforeachループの終了後にも残ります。これは、その行がコーデックスで参照しているものだと思います。

しかし、その仮定は間違っています。 関数 は自己完結型のコードであり、グローバルを除いて、関数内のこれらのコードは関数自体にしか利用できません。 wp_list_pluck()はその内部値( 変数 )をグローバル化しません。そのため、関数の内側のforeachループの後で配列の最後の値がまだ利用可能で、未設定になっていない場合でも関数の外側にあるコードの一部なので、コーデックスのその行に記述されている参照渡しの問題はありません。

wp_list_pluck()は、あらゆる単純なforeachループと同じくらい有効に使用できます。選択はあなた次第です。私は個人的にはコードを節約するのでwp_list_pluck()を好みます、そして後で悪夢をデバッグすることにつながるかもしれない変数を設定解除することを覚えておく必要はありません。

最後の注意ですが、array_columnが関数に渡された場合も同様に機能するので、wp_list_pluck()$index_keyを置き換えることもできます。

3
Pieter Goosen