Php 意外观察:数组的var_dump()正在标记引用的元素。。。从什么时候开始?

Php 意外观察:数组的var_dump()正在标记引用的元素。。。从什么时候开始?,php,reference,var-dump,Php,Reference,Var Dump,我刚刚对数组运行了一些简单的调试测试,注意到当我对数组执行var_dump()时,输出会标记数组中被另一个变量引用的任何元素。作为一个简单的实验,我运行了以下代码: $array = range(1,4); var_dump($array); echo '<br />'; foreach($array as &$value) { } var_dump($array); echo '<br />'; $value2 = &$array[1]; va

我刚刚对数组运行了一些简单的调试测试,注意到当我对数组执行var_dump()时,输出会标记数组中被另一个变量引用的任何元素。作为一个简单的实验,我运行了以下代码:

$array = range(1,4);

var_dump($array);
echo '<br />';

foreach($array as &$value) {
}

var_dump($array);
echo '<br />';

$value2 = &$array[1];

var_dump($array);
echo '<br />';
注意∫ 元素3旁边的符号,随后是元素1。还要注意,这些条目不显示条目的数据类型

在进行了一些实验之后,如果我使用var_转储标量类型,或者使用对象或资源,我就看不到这一点。如果数组包含字符串数据,则符号为&(并且它仍然显示数据类型),与float、boolean和object条目类似

这是针对PHP5.2.8运行的

第一个问题:这种行为是什么时候开始的,还是我以前根本没有注意到的


第二个问题:如果可以通过var_dump()以这种方式标记被引用的元素,那么核心PHP中是否有任何函数允许我识别数组元素是否被另一个变量引用;或者将从_zval_struct返回refcount或ref标志?

不确定这是否回答了您的问题,但您可以使用

debug_zval_dump($array);
要获取refcount,请执行以下操作:

array(4) refcount(2){ 
    [0]=> long(1) refcount(1) 
    [1]=> &long(2) refcount(2) 
    [2]=> long(3) refcount(1) 
    [3]=> &long(4) refcount(2) 
} 
也看到这个

array(4) refcount(2){ 
    [0]=> long(1) refcount(1) 
    [1]=> &long(2) refcount(2) 
    [2]=> long(3) refcount(1) 
    [3]=> &long(4) refcount(2) 
}