程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP unset()函數銷毀變量

PHP unset()函數銷毀變量

編輯:關於PHP編程

我們在學習

PHP unset()函數是用來銷毀變量的,但很多時候,這個函數只把變量給銷毀了,內存中存放的該變量的值仍然沒有銷毀,也就是沒能達到我們想要的釋放內存的效果。這裡我建議大家用 $變量=null 的方法來釋放其內存。原因看了下面的就知道了。

以下是關於PHP unset()函數的幾點要點:(以下均在windows環境下測試,php 2.5.9)

1. 該函數只有在變量值所占空間超過256字節長的時候才會釋放內存
2. 只有當指向該值的所有變量(比如有引用變量指向該值)都被銷毀後,地址才會被釋放(也要執行1的判斷)

下面給出例子代碼論證:

  1. < ?php  
  2. $test=str_repeat("1",256);  
  3. $s = memory_get_usage();   
  4. //改函數用來查看當前所用內存  
  5. unset($test);  
  6. $e = memory_get_usage();  
  7. echo ' 釋放內存: '.($s-$e);   
  8. //輸出為272,但如果上面test變量改為
    $test=str_repeat("1",255),輸出則為0  
  9. ?> 

至於為什麼是272而不是256,就不是很清楚了,不知道內部是怎麼處理的。

  1. < ?php  
  2. $test = str_repeat("1",256);  
  3. $p = &$test;  
  4. unset($test);  
  5. echo $p;   
  6. //輸出為256個1。如果上面改為unset($p)
    ,更不行了,echo $test 直接顯示為256個1  
  7. ?> 

也就是說內存中賦給$a的值仍然存在。可見unset()並沒達到釋放內存的效果。

但如果在上述代碼中加入$test=null,或者再加一個unset($p),就能達到釋放內存效果了,PHP unset()函數測試代碼如下:

變量賦值為null方法:

  1. < ?php  
  2. $test = str_repeat("1",256);  
  3. $p = &$test;  
  4. $s = memory_get_usage();   
  5. $test = null;  
  6. unset($test);  
  7. $e = memory_get_usage();  
  8. echo ' 釋放內存: '.($s-$e); 
  9. //輸出為272  
  10. var_dump($p); //輸出為NULL  
  11. ?> 

將指向該地址中值的變量全部銷毀的方法:

  1. < ?php  
  2. $test = str_repeat("1",256);  
  3. $p = &$test;  
  4. $s = memory_get_usage();   
  5. //注意,以下2個unset()順序對調沒
    有關系,不影響結果  
  6. unset($p);  
  7. unset($test);   
  8. $e = memory_get_usage();  
  9. echo ' 釋放內存: '.($s-$e); //輸出為272  
  10. ?> 

到此PHP unset()函數論證完畢。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved