意外的观察:数组的 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];
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 返回引用计数或引用标志?
I've just been running some simple debug tests against arrays, and noticed that when I do a var_dump() of an array, the output is flagging any element in the array that is referenced by another variable. As a simple experiment, I ran the following code:
$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 />';
which gives the following output:
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) }
Note the ∫ symbol alongside element 3 and subsequently element 1. Note also that those entries don't show the entry's datatype.
Following some experimentation, I don't see this if I var_dump a scalar type, or with objects or resources. If the array contains string data, the symbol is a & (and it does still show the datatype), likewise with float, boolean and object entries.
This is running against PHP 5.2.8
First question: When did this behaviour start, or is it something that I simply haven't noticed before now?
Second question: If referenced elements can be flagged in this way by var_dump(), is there any function in core PHP that will allow me to identify if an array element is referenced by another variable; or that will return the refcount or ref flag from a _zval_struct?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不确定这是否回答了您的问题,但您可以使用它
来获取引用计数:
另请参阅此 Derick Rethans(PHP 核心开发人员)撰写的关于引用计数的文章。
Not sure if this answers your question, but you can use
to get the refcount:
Also see this Article by Derick Rethans (PHP Core Dev) about Refcounting.