background image

 
至于为什么是 272 而不是 256,就不是很清楚了,不知道内部是怎么处理的。
代码如下:
 
< ?php

$test

 = 

str_repeat

("1",256);

$p

 = &

$test

;

unset(

$test

);

echo

 

$p

//输出为 256 个 1。如果上面改为 unset($p),更不行了,echo $test 直接显示为 256 个 1

?> 
 
也就是说内存中赋给

$a

的值仍然存在。可见 unset()并没达到释放内存的效果。

但如果在上述代码中加入

$test

=null,或者再加一个 unset(

$p

),就能达到释放内存效果了,

PHP unset()函数测试代码如下:
变量赋值为 null 方法:
代码如下:
 
< ?php

$test

 = 

str_repeat

("1",256);

$p

 = &

$test

;

$s

 = memory_get_usage(); 

$test

 = null;

unset(

$test

); 

//试一下将该句与$test=null 调换先后顺序,则结果将不相同

$e

 = memory_get_usage();

echo

 ' 释放内存: '.(

$s

-

$e

);

//输出为 272

var_dump(

$p

); 

//输出为 NULL

?> 
 
将指向该地址中值的变量全部销毁的方法:
代码如下:
 
< ?php

$test

 = 

str_repeat

("1",256);

$p

 = &

$test

;

$s

 = memory_get_usage(); 

//注意,以下 2 个 unset()顺序对调没有关系,不影响结果

unset(

$p

);