NikiC在another thread中说明:
在[foreach]迭代之前,
$array
被“软复制”了 在foreach中使用。这意味着没有实际的副本,只有$array
的zval的refcount增加到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?
只需查看代码,我们最多可以看到两个数组变量。
为什么引用[{1}}?
为什么在3
运行后不引用{cn} {<1}}
答案 0 :(得分:1)
xdebug_debug_zval()正在查看$ array变量而不是$ key变量。 如果您将代码更改为:
foreach ($array as $key => $value) {
echo $key . " : " . $values . "<br>";
//xdebug_debug_zval('array');
}
将返回数组的正确值。我没有xdebug功能,所以我无法测试你放在那里的值。