php如何刪除變數

王林
發布: 2023-02-24 15:42:02
原創
4476 人瀏覽過

php如何刪除變數

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

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

 2、隱式銷毀,PHP是腳本語言,在代碼執行完最後一行時,所有申請的內存都要釋放掉;

從上面兩種銷毀方式中,我們可以總結出銷毀的三種方法:那就是

1、unset()

2、$varname=null

3、析構函數__destruct()

舉例來說:

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 一樣有值。

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

  <?php
        $a = 1;
        $b = &$a;
        $a=null;
        var_dump($a);
        var_dump($b);
登入後複製
输出的结果是:
NULL NULL
登入後複製

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

3、從上例子可以看出,析構函數__destruct()是在PHP執行完最後一段程式碼的時候,才啟動,但是這樣理解並不夠精準,舉例

<?php 
class Human{       
     public  $name = &#39;开始&#39;;        
     public function __destruct(){                
     echo &#39;结束&#39;;        
     }}
     $a = new Human;
     echo $a->name;
     unset($a);   //销毁函数 
     $a = new Human; 
     echo &#39;***********************&#39;;

输出的结果是:

开始结束***************************结束
登入後複製
class Human{       
     public  $name = &#39;开始&#39;;        
     public function __destruct(){                
        echo &#39;结束&#39;;        
     }}
     $a = new Human;
     $b = $a;
     echo $a->name;
     unset($a);   //销毁函数 
     $a = new Human; 
     echo &#39;***************************&#39;;

结果是:

开始***************************结束结束
登入後複製

以上結果說明,程式碼並沒有執行完最後一行的時候啟動,而是當物件銷毀的時候.自動執行。之所以在human()函數也有unset()的情況下,析構函數__destruct()還是在最後執行,那是因為引用傳值,物件的記憶體並沒有取消,物件並沒有完全銷毀導致。

所以結論是:如果沒有人為銷毀的話,則在程式碼執行結束之後,系統自動釋放記憶體時執行析構函數__destruct(),如果物件有銷毀的時候,則自動執行析構函數。

推薦教學:PHP影片教學

以上是php如何刪除變數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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