首頁 > 後端開發 > PHP問題 > php銷毀變數的2種方法是什麼

php銷毀變數的2種方法是什麼

青灯夜游
發布: 2023-03-12 22:02:01
原創
3094 人瀏覽過

php銷毀變數的2種方法:1、使用unset()函數,語法“unset($varname)”;2、給指定變數賦值為“NULL”,語法“$varname=null;” 。

php銷毀變數的2種方法是什麼

本教學操作環境:windows7系統、PHP7.1版,DELL G3電腦

PHP的變數或物件的銷毀可以分成明確銷毀和隱含銷毀:

1、明確銷毀,當物件沒有被引用時就會被銷毀,所以我們可以unset或為其賦值NULL; 

2、隱含銷毀,PHP是腳本語言,在程式碼執行完最後一行,所有申請的記憶體都要釋放掉.

因此,銷毀變數的兩種方法:

  • unset()

  • $varname=null

舉例來說:

class Human { 
  public $name = '张三'; 
  public $gender = null; 
  public function __destruct() { 
      echo &#39;死了!<br />&#39;; 
  } 
} 
$a = new Human(); 
$b = $c = $d = $a;
unset($a);
$d=null;


echo &#39;<hr />&#39;;
var_dump($a);
echo &#39;<hr />&#39;;
var_dump($b);
echo &#39;<hr />&#39;;
var_dump($c);
echo &#39;<hr />&#39;;
var_dump($d);
登入後複製

結果如下:

Notice: Undefined variable: a in /Library/WebServer/Documents/test.php on line 42
NULL
object(Human)#1 (2) { ["name"]=> string(6) "张三" ["gender"]=> NULL }
object(Human)#1 (2) { ["name"]=> string(6) "张三" ["gender"]=> NULL }
NULL 死了!
登入後複製

首先我們要知道,在PHP中,變數名稱是儲存在記憶體堆疊中,它是指向堆中具體記憶體的位址,透過變數名稱來尋找堆中的記憶體; 因此我們可以得出結論:

<?php
$a = 1;
$b = &$a;
unset($a);
var_dump($a); 
var_dump($b);
登入後複製

結果是:
##

Notice: Undefined variable: a in E:\amp\apache\htdocs\index.php on line 5
NULL int(1)
登入後複製

所以unset( )並沒有真正銷毀變數中記憶體值,僅僅是切斷了變數與記憶體之間的關係,並將變數名稱也給幹掉了,但記憶體只要還被引用著就不會被釋放; 而在PHP中物件的傳值預設是引用傳值,這也解釋了Human類別中,$a被unset()了,但是$b =$c = $d 一樣有值。

$varname=null,變數名稱依然存在,但記憶體值卻被幹掉了。那麼在引用傳值的情況下又是如何呢?範例:

<?php        
$a = 1;        
$b = &$a;        
$a=null;        
var_dump($a);        
var_dump($b);
登入後複製

輸出的結果是:

NULL NULL
登入後複製
所以,

$varname=null,雖然變數名稱和記憶體指向都還存在,但是記憶體中的值卻是完全刪除掉了。

推薦學習:《

PHP影片教學

以上是php銷毀變數的2種方法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
php
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板