上一篇文章我們了解了反序列化對(duì)象或數(shù)組的方法,有需要的請(qǐng)看《php如何反序列化數(shù)組和對(duì)象》。這次我們向大家介紹使用函數(shù)銷(xiāo)毀變量的方法,有需要的可以參考參考。
在開(kāi)始文章之前,我們先來(lái)看一下什么是變量的銷(xiāo)毀。
PHP的變量或?qū)ο蟮匿N(xiāo)毀可以分成顯式銷(xiāo)毀和隱式銷(xiāo)毀:
1、顯式銷(xiāo)毀,當(dāng)對(duì)象沒(méi)有被引用時(shí)就會(huì)被銷(xiāo)毀,所以我們可以u(píng)nset或?yàn)槠滟x值NULL;
2、隱式銷(xiāo)毀,PHP是腳本語(yǔ)言,在代碼執(zhí)行完最后一行時(shí),所有申請(qǐng)的內(nèi)存都要釋放掉。
我們今天要介紹的就是顯式銷(xiāo)毀中的unset。
我們先來(lái)看一個(gè)小栗子。
<?php class Human { public $name = '張三'; public $gender = null; public function __destruct() { echo '結(jié)束!<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); ?>
結(jié)果是
話不多說(shuō),讓我們來(lái)看一下這個(gè)函數(shù)吧。
unset()函數(shù)用于銷(xiāo)毀給定的變量。
所以u(píng)nset()并沒(méi)有真正銷(xiāo)毀變量中內(nèi)存值,僅僅是切斷了變量與內(nèi)存之間的關(guān)系,并將變量名也給干掉了,但內(nèi)存只要還被引用著就不會(huì)被釋放;而在PHP中對(duì)象的傳值默認(rèn)是引用傳值,這也解釋了Human
類(lèi)中,$a被unset()
了,但是$b =$c = $d
一樣有值。
再來(lái)看看這個(gè)函數(shù)的語(yǔ)法吧。
void unset (要銷(xiāo)毀的變量)
如果unset()是函數(shù)中的全局變量,則只銷(xiāo)毀局部變量,并且調(diào)用環(huán)境中的變量將保持與調(diào)用unset()之前相同的值。
如果unset()是函數(shù)中通過(guò)引用傳遞的變量,則只銷(xiāo)毀局部變量,并且調(diào)用環(huán)境中的變量將保持與調(diào)用unset()之前相同的值。
如果unset()是函數(shù)中的靜態(tài)變量,則靜態(tài)變量將在函數(shù)中銷(xiāo)毀。但是,當(dāng)再次調(diào)用此函數(shù)時(shí),靜態(tài)變量將恢復(fù)到上次銷(xiāo)毀之前的值。
就說(shuō)到這里了,有其他想知道的,可以點(diǎn)擊這個(gè)哦?!?→php視頻教程