Pac*_*ier 12 php arrays foreach php-internals
在博客文章"PHP Internals:什么时候复制foreach"中,NikiC表示在这样的代码中:
片段1
$array = range(0, 100000);
foreach ($array as $key => $value) {
xdebug_debug_zval('array'); // array is not copied, only refcount is increased
}
Run Code Online (Sandbox Code Playgroud)
foreach不会复制数组,因为唯一foreach修改的$array是它的内部数组指针.
他还说在这样的代码中:
片段2
$array = range(0, 100000); // line 1
test($array);
function test($array) {
foreach ($array as $key => $value) { // line 4
xdebug_debug_zval('array'); // array is copied, refcount not increased
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
foreach将复制数组,因为如果没有,第$array1行中的变量将被更改.
然而,唯一foreach修改的$array是它的内部数组指针.那么为什么$array第1行中变量的内部数组指针发生了变化呢?在片段1中没关系,为什么它在片段2中很重要?
为什么foreach需要在代码片段2中复制数组,即使我们没有在循环中修改它?
| 归档时间: |
|
| 查看次数: |
1593 次 |
| 最近记录: |