问题描述
在学习元数据 lazy-loading 的同时,我遇到了 these lines of code:
// 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;
}
}
}
我以为它与 this topic 有关,但在这里没有引用,唯一的 foreach
循环被包含在一个函数中,在这种情况下 by-reference 的操作是怎样的?
而且,为了最佳实践,我们什么时候应该使用 wp_list_pluck()
功能?
最佳解决方案
在任何 foreach
循环中,循环的数组的最后一个值保留在 foreach
循环结束后。这就是为什么在 foreach
循环完成后,实际上应该总是取消设置该值。
如果 $index_key
未通过,wp_list_pluck()
也只是基本的 foreach
循环。此外,与任何 foreach
循环一样,阵列的最后一个值仍然在 foreach
循环结束之后,我认为这是该代码中引用的代码。
但是,这个假设是错误的。 Functions 是自包含的代码段,除了全局变量之外,函数中的这些代码段只能用于函数本身。 wp_list_pluck()
没有全局化任何内部值 (变量),所以即使在函数中 foreach
循环之后数组的最后一个值仍然可用,并且不会被取消设置,它不可用于任何代码之外的任何代码功能,所以您不能按照该规范中的该行所述 pass-by-reference 问题。
wp_list_pluck()
与任何简单的 foreach
循环一样有效。选择取决于你。我个人更喜欢 wp_list_pluck()
,因为它节省了代码,并且您不需要记住去设置以后可能导致调试噩梦的变量。
只是最后一个注意事项,wp_list_pluck()
也可以替代 array_column
,因为它的工作原理相同,如果 $index_key
被传递给函数
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。