【发布时间】:2013-08-12 01:58:12
【问题描述】:
NikiC 在another thread 中声明:
就在 [a 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?
只看代码,我们最多可以看到两个数组变量。
为什么引用计数是3?
为什么 foreach 运行后没有引用计数 2?
【问题讨论】:
-
在你的 foreach 循环中你不应该使用 $value 变量来引用你的数组元素吗?
-
@Crackertastic,我没有在循环中使用任何变量。
-
我收到
refcount2,我错过了什么吗?array: (refcount=2, is_ref=0)=array (0 => (refcount=1, is_ref=0)=0, 1 => (refcount=1, is_ref=0)=1, 2 => (refcount=2, is_ref=0)=2) -
@vinodadhikary,你没有修改就运行了完全相同的代码?我在 5.3.26,你呢?
-
PHP 5.5.1,我得到 refcount=2。
标签: php foreach xdebug php-internals