5

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

4

1 回答 1

1

xdebug_debug_zval() 正在查看 $array 变量而不是 $key 变量。如果您将代码更改为:

foreach ($array as $key => $value) {
    echo $key . " : " . $values . "<br>";
    //xdebug_debug_zval('array');

}

将返回数组的正确值。我没有 xdebug 功能,所以我无法测试你放在那里的值。

于 2013-08-10T04:46:32.663 回答