-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
最近在看xdebug_debug_zval,遇到一诡异问题,记录下:
- 代码如下:
<?php
function test($b) {
xdebug_debug_zval('b');
}
$a = 1;
xdebug_debug_zval('a');
test($a);
结果如下:
a: (refcount=1, is_ref=0)=1
b: (refcount=3, is_ref=0)=1
问题就在这,当我们都以为内部b:(refcount=2)的时候突然变成了3,在经过一番查找,以及咨询大牛康神之后,最终给出了答案;
-
执行过程:
1.1 我们将1赋给变量$a;这个时候xdebug_debug_zval('a');的输出是refcount=1,然后将$a变量传递给test();1.2 当我们将$a传递给test()时,其实我们可以把test($b)看做是一个整体,只是$b存储在不同的符号表中(test函数符号表),这个时候引用计数加2,并不是加1,原因是因为这个函数符号表(函数栈)也包含了这个变量容器的引用;
待续~~~~~
参考链接:http://www.phppan.com/tag/refcount/
英文原文地址:http://derickrethans.nl/files/phparch-php-variables-article.pdf
Metadata
Metadata
Assignees
Labels
No labels
