NikiC 在另一个帖子中说:
就在 [a foreach] 迭代之前,它
$array
被“软复制”以用于 foreach。这意味着没有进行实际的复制,只是将 zval 的 refcount$array
增加到 2。
但是,我的测试代码显示了不同的结果:
$array = array(0, 1, 2);
xdebug_debug_zval('array'); // refcount=1, is_ref=0
// so far so good
foreach ($array as $key => $value) {
xdebug_debug_zval('array'); // refcount=3, is_ref=0
} // why is refcount 3 instead of 2?
只看代码,我们最多可以看到两个数组变量。
为什么是 refcount 3
?
为什么运行2
后不引用计数foreach
?