为什么foreach将refcount增加2而不是1?

Pac*_*ier 5 php foreach xdebug php-internals

NikiC在另一个帖子中说:

在[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?
Run Code Online (Sandbox Code Playgroud)

只需查看代码,我们最多可以看到两个数组变量.

为什么要引用引用计数3

运行2后为什么不引用refcount foreach

小智 1

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

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

}
Run Code Online (Sandbox Code Playgroud)

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