我刚刚对数组运行了一些简单的调试测试,并注意到当我对数组执行 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 />';
给出以下输出:
array(4) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) }
array(4) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> ∫(4) }
array(4) { [0]=> int(1) [1]=> ∫(2) [2]=> int(3) [3]=> ∫(4) }
请注意元素 3 旁边的 ∫ 符号以及随后的元素 1。另请注意,这些条目不显示条目的数据类型。
经过一些实验,如果我 var_dump 标量类型或对象或资源,我看不到这一点。如果数组包含字符串数据,则符号为 &(它仍然显示数据类型),浮点数、布尔值和对象条目也是如此。
这是针对 PHP 5.2.8 运行的
第一个问题:这种行为是什么时候开始的,还是我以前根本没有注意到的?
第二个问题:如果引用的元素可以通过 var_dump() 以这种方式标记,那么核心 PHP 中是否有任何函数可以让我识别数组元素是否被另一个变量引用;还是会从_zval_struct 返回refcount 或ref 标志?