gpt4 book ai didi

php - 意外观察 : var_dump() of an array is flagging referenced elements. .. 从什么时候开始?

转载 作者:可可西里 更新时间:2023-11-01 12:56:12 25 4
gpt4 key购买 nike

我刚刚对数组运行了一些简单的调试测试,并注意到当我对数组执行 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,则看不到这一点。如果数组包含字符串数据,则符号为 &(它仍然显示数据类型), float 、 bool 值和对象条目也是如此。

这是针对 PHP 5.2.8 运行的

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

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

最佳答案

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

debug_zval_dump($array);

获取引用计数:

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

另见 Article by Derick Rethans (PHP Core Dev) about Refcounting .

关于php - 意外观察 : var_dump() of an array is flagging referenced elements. .. 从什么时候开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4194073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com