在玩xdebug的引用计数功能时,我遇到了这种奇怪的行为:
$a = array('foo', 'bar');
xdebug_debug_zval('a');
foreach ($a as $key => $s) {
xdebug_debug_zval('a');
echo "$s\n";
unset($a[$key]);
xdebug_debug_zval('a');
}
输出结果为:
a: (refcount=1, is_ref=0)=array (0 => (refcount=1, is_ref=0)='foo', 1 => (refcount=1, is_ref=0)='bar')
a: (refcount=3, is_ref=0)=array (0 => (refcount=2, is_ref=0)='foo', 1 => (refcount=1, is_ref=0)='bar')
foo
a: (refcount=1, is_ref=0)=array (1 => (refcount=2, is_ref=0)='bar')
a: (refcount=1, is_ref=0)=array (1 => (refcount=3, is_ref=0)='bar')
bar
a: (refcount=1, is_ref=0)=array ()
为什么refcount
的{{1}}会跳到三个?也许是因为每个本地a
都会引用它?如果这是保存的情况?然后我看到$s
对于数组的第一项或第二项增加1,具体取决于正在执行的循环。但是,在我取消第一项之后,为什么第二项的refcount
增加了一个?
显然,我想要实现的目标是:
refcount
有这个输出:
$a = array('foo', 'bar');
xdebug_debug_zval('a');
$tot = count($a);
for ($i = 0; $i < $tot; $i++) {
xdebug_debug_zval('a');
echo $a[$i]."\n";
unset($a[$i]);
xdebug_debug_zval('a');
}
是否可以使用a: (refcount=1, is_ref=0)=array (0 => (refcount=1, is_ref=0)='foo', 1 => (refcount=1, is_ref=0)='bar')
a: (refcount=1, is_ref=0)=array (0 => (refcount=1, is_ref=0)='foo', 1 => (refcount=1, is_ref=0)='bar')
foo
a: (refcount=1, is_ref=0)=array (1 => (refcount=1, is_ref=0)='bar')
a: (refcount=1, is_ref=0)=array (1 => (refcount=1, is_ref=0)='bar')
bar
a: (refcount=1, is_ref=0)=array ()
来实现此结果?
答案 0 :(得分:0)
尝试以下方法来处理后台发生的事情:
print_r(array_keys(get_defined_vars()));
print_r(array_values(get_defined_vars()));
它将在脚本中的任何给定点输出所有已分配的变量。尝试将其移动到文件中的不同点。查看更改并相应地进行调整。
答案 1 :(得分:0)
此外,如果您只想使用参考文献,那么您只需在处理变量。强文本之前添加&#34;&amp;&#34;(&符号)符号