PHP的變數或物件的銷毀可以分成明確銷毀和隱含銷毀:
1、明確銷毀,當物件沒有被引用時就會被銷毀,所以我們可以unset或為其賦值NULL;
2、隱式銷毀,PHP是腳本語言,在代碼執行完最後一行時,所有申請的內存都要釋放掉;
從上面兩種銷毀方式中,我們可以總結出銷毀的三種方法:那就是
1、unset()
2、$varname=null
3、析構函數__destruct()
舉例來說:
class Human { public $name = '张三'; public $gender = null; public function __destruct() { echo '死了!<br />'; } } $a = new Human(); $b = $c = $d = $a; unset($a); $d=null; echo '<hr />'; var_dump($a); echo '<hr />'; var_dump($b); echo '<hr />'; var_dump($c); echo '<hr />'; 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 = '开始'; public function __destruct(){ echo '结束'; }} $a = new Human; echo $a->name; unset($a); //销毁函数 $a = new Human; echo '***********************'; 输出的结果是: 开始结束***************************结束
class Human{ public $name = '开始'; public function __destruct(){ echo '结束'; }} $a = new Human; $b = $a; echo $a->name; unset($a); //销毁函数 $a = new Human; echo '***************************'; 结果是: 开始***************************结束结束
以上結果說明,程式碼並沒有執行完最後一行的時候啟動,而是當物件銷毀的時候.自動執行。之所以在human()函數也有unset()的情況下,析構函數__destruct()還是在最後執行,那是因為引用傳值,物件的記憶體並沒有取消,物件並沒有完全銷毀導致。
所以結論是:如果沒有人為銷毀的話,則在程式碼執行結束之後,系統自動釋放記憶體時執行析構函數__destruct(),如果物件有銷毀的時候,則自動執行析構函數。
推薦教學:PHP影片教學
以上是php如何刪除變數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文比較了酸和基本數據庫模型,詳細介紹了它們的特徵和適當的用例。酸優先確定數據完整性和一致性,適合財務和電子商務應用程序,而基礎則側重於可用性和

本文討論了確保PHP文件上傳的確保,以防止諸如代碼注入之類的漏洞。它專注於文件類型驗證,安全存儲和錯誤處理以增強應用程序安全性。

本文討論了在PHP中實施API速率限制的策略,包括諸如令牌桶和漏水桶等算法,以及使用Symfony/Rate-limimiter之類的庫。它還涵蓋監視,動態調整速率限制和手

本文討論了使用password_hash和pyspasswify在PHP中使用密碼的好處。主要論點是,這些功能通過自動鹽,強大的哈希算法和SECH來增強密碼保護

本文討論了OWASP在PHP和緩解策略中的十大漏洞。關鍵問題包括注射,驗證損壞和XSS,並提供用於監視和保護PHP應用程序的推薦工具。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

Dreamweaver CS6
視覺化網頁開發工具

Dreamweaver Mac版
視覺化網頁開發工具