什么时候应该使用,什么时候不应该使用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()函数?


我和你在一起,朋友。我看过函数的源代码,codex和dev docs,看不到该注释所指的内容。
Andy Macaulay-Brook

Answers:


3

在任何foreach循环中,要循环的数组的最后一个值在循环结束后仍保留foreach。这就是为什么在foreach循环完成后实际上应该始终取消设置该值的原因。

wp_list_pluck()foreach如果$index_key不通过,也是一个基本循环。另外,与任何foreach循环一样,数组的最后一个值在foreach循环结束后仍保留,我认为这就是该行在法典中所指的含义。

但是,这种假设是错误的。函数是自包含的代码段,除了全局变量外,函数内部的这些代码段仅可用于函数本身。wp_list_pluck()不会全局化其任何内部值(变量),因此,即使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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.