php 变量存在一个叫"zval"的变量容器中,"zval"变量容器包括含变量的类型和值,还包
“
括额外的两个字节信息,分别是 is_ref”
“
表示变量是否属于引用, refcount”指向这个
zval 变量容器的变量个数。
如果你安装了
,就可以用 xdebug_debug_zval()
“
显示 zval”的信息了。如下:
1.
<?
php
2.
$str
=
"phpddt.com"
;
3.
xdebug_debug_zval
(
'str'
);
结果:
str:
(refcount=1, is_ref=0),
string
'phpddt.com'
(length=10)
”
只有当变量容器在 refcount“变成 0 时就被销毁.当你 unset()一个变量时,想要的
“zval”中 refcount 就会减 1,再来说说前几天遇到的
1.
<?
php
2.
$a
=
"aaa"
;
3.
$b
=
&
$a
;
4.
unset
(
$a
);
5.
//echo $b; //这里依然会输出 aaa,用 xdebug_debug_zval 打印你就知道为什
么了
6.
xdebug_debug_zval
(
"b"
);
结果:
b:
(refcount=1, is_ref=0),string 'aaa' (length=3)
继续说引用计数器问题,对于 array 和 object 符合类型情况又不一样了:
1.
<?
php
2.
/** by www.phpddt.com */
3.
$arr
=
array
(
'a'
=>
'aaa'
,
'b'
=>
"bbb"
);
4.
xdebug_debug_zval
(
'arr'
);