unset传递的值是一个对象或者值的复制(比如传递数组,传递的是一个新的复制,而不是引用),结果原对象却被销毁了。好奇怪。
大神快来解答这个问题。以前一直用unset,今天突然想到了这个问题。
比如:
<?php
$a='hello';
$b=true;
unset($b);
unset($a);
echo $b;
echo $a;
?>
这时就会报出Undefined variable的错误。
正如舞林所说,这种销毁变量的方式有可能是将引用计数减一。
但是这样做:
<?php
$a='hello';
$b=&$a;
unset($a);
echo $a;
?>
这个时候,$a
依然被销毁。报出Undefined variable
的错误的错误。
如果unset
掉b
,来看看结果:
<?php
$a='hello';
$b=&$a;
unset($b);
echo $a;
?>
只是销毁了$b
,$
b虽然是$a
的引用,但是$a
没有被销毁。打印出hello
所以unset的机制并没有那么简单。。
第一段代码 a和b是两块不同的内存 所以unset掉两者 根本没影响
第二段代码 b引用a 使得对应的zval ref_count+1 is_ref +1 此时不管unset掉a或者b 只是断了一根引用对另外的那个值没影响 还是指向的那块区域