最近在看xdebug_debug_zval,遇到一诡异问题,记录下:
- 代码如下:
1 |
|
结果如下:
1 | a: (refcount=1, 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