いつ、どのような場合にwp_list_pluck()を使用すべきですか?


10

メタデータの遅延読み込みについて学習しているときに、次のコード行に出会いました。

// 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()関数を使用する必要がありますか?


私はあなたと一緒です、fwiw。私は関数のソース、codex&dev docsを見ましたが、そのコメントが何を指しているのかわかりません。
Andy Macaulay-Brook

回答:


3

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

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

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

wp_list_pluck()単純なforeachループと同じように使用できます。選択はあなた次第です。私は個人的wp_list_pluck()にはコードを節約できるので、後でデバッグの悪夢につながる可能性がある変数の設定を解除することを覚えておく必要はありません。

最後のメモですが、関数に渡された場合と同じように機能するため、wp_list_pluck()置き換えることもできますarray_column$index_key


設定解除またはリセットしますか?
fuxia

@toscho私の知る限り、私が学んだことから、unset( $value )foreachのループ、 wp_reset_postdata()あなたが使用した場合setup_postdata( $post )foreachループ、およびreset() 配列の最初の項目への内部ポインタのバックを設定します。私が間違っている場合、または他に何か追加したいことがあれば、答えでそれを実行して、私たち全員がそれから利益を得られるようにする必要があります。私見、これはコミュニティのほとんどが恩恵を受けることができる質問であり、私が間違っている場合は、私を修正して適切な回答を投稿します
Pieter Goosen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.