当前位置: 首页 > 知识库问答 >
问题:

当我们没有在循环中修改数组时,为什么foreach要复制数组?[副本]

党星鹏
2023-03-14

在一篇博客文章“PHP Internals:When does foreach copy”中,NikiC指出在下面这样的代码中:

$array = range(0, 100000);
foreach ($array as $key => $value) {
    xdebug_debug_zval('array'); // array is not copied, only refcount is increased
}
$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
        // ...
    }
}

共有1个答案

水睿
2023-03-14

这是因为在第二种情况下,$array通过值传递给函数test()。因此,$数组的一个副本在函数中生成,foreach()在该副本上工作。如果通过引用test()函数传递$数组,情况就不同了。

有关按值传递与按引用传递的信息,请参阅此问题

 类似资料: