PHP析構(gòu)函數(shù)destruct與垃圾回收機(jī)制的講解
析構(gòu)函數(shù)
當(dāng)某個對象成為垃圾或者當(dāng)對象被顯式銷毀時執(zhí)行。
PHP5中提供的析構(gòu)函數(shù)是__destruct,其與構(gòu)造方法__construct相對應(yīng)。
垃圾回收——GC(Garbage Collector)
在PHP中,沒有任何變量指向這個對象時,這個對象就成為垃圾,PHP會將其在內(nèi)存中銷毀。
這是PHP的GC(Garbage Collector)垃圾處理機(jī)制,垃圾加收可以防止內(nèi)存溢出。
當(dāng)一個PHP線程結(jié)束時,當(dāng)前占用的所有內(nèi)存空間都會被銷毀,當(dāng)前程序中的所有對象同樣被銷毀。
__destruct()
析構(gòu)函數(shù),是在垃圾對象被回收時執(zhí)行。
析構(gòu)函數(shù)是由系統(tǒng)自動調(diào)用的,也可以被顯式調(diào)用,但不要這樣去做。
如下面程序所示,程序結(jié)束前,所有對象被銷毀。析構(gòu)函數(shù)被調(diào)用了。
<?php class Person { public function __destruct(){ echo '析構(gòu)函數(shù)現(xiàn)在執(zhí)行了 <br />'; echo '這里一般用來設(shè)置、關(guān)閉數(shù)據(jù)庫、關(guān)閉文件等收尾工作'; } } $p = new Person(); for($i = 0; $i < 5; $i++){ echo "$i <br />"; } ?>
程序運(yùn)行結(jié)果:
0
1
2
3
4
析構(gòu)函數(shù)現(xiàn)在執(zhí)行了
這里一般用來設(shè)置、關(guān)閉數(shù)據(jù)庫、關(guān)閉文件等收尾工作
當(dāng)對象沒有指向時,對象被銷毀。
<?php class Person { public function __destruct(){ echo '析構(gòu)函數(shù)現(xiàn)在執(zhí)行了 <br />'; } } $p = new Person(); $p = null; // 析構(gòu)函數(shù)在這里執(zhí)行了 $p = "abc"; // 一樣的效果 for($i = 0; $i < 5; $i++){ echo "$i <br />"; } ?>
程序運(yùn)行結(jié)果:
析構(gòu)函數(shù)現(xiàn)在執(zhí)行了
0
1
2
3
4
上面的例子中,我們將$p設(shè)置為空或者賦予$p一個字符串,這樣$p之前指向的對象就成為了垃圾對象。PHP將這個對象垃圾銷毀。
php unset變量
<?php class Person { public function __destruct(){ echo '析構(gòu)函數(shù)現(xiàn)在執(zhí)行了 <br />'; } } $p = new Person(); $p1 = $p; unset($p); echo '現(xiàn)在把 $p 被銷毀了,對象是否也被銷毀了呢? <br />'; for($i = 0; $i < 5; $i++){ echo "$i <br />"; } echo '現(xiàn)在再把 $p1 也銷毀掉,即已經(jīng)沒有指向?qū)ο蟮淖兞苛?lt;br />'; unset($p1); // 現(xiàn)在沒有指向?qū)ο蟮淖兞苛?析構(gòu)函數(shù)在這里執(zhí)行了 ?>
程序運(yùn)行結(jié)果:
現(xiàn)在把 $p 被銷毀了,對象是否也被銷毀了呢?
0
1
2
3
4
現(xiàn)在再把 $p1 也銷毀掉,即已經(jīng)沒有指向?qū)ο蟮淖兞苛?br /> 析構(gòu)函數(shù)現(xiàn)在執(zhí)行了
unset 銷毀的是指向?qū)ο蟮淖兞浚皇沁@個對象。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
PHP實(shí)現(xiàn)針對日期,月數(shù),天數(shù),周數(shù),小時,分,秒等的加減運(yùn)算示例【基于strtotime】
這篇文章主要介紹了PHP實(shí)現(xiàn)針對日期,月數(shù),天數(shù),周數(shù),小時,分,秒等的加減運(yùn)算,結(jié)合實(shí)例形式分析了基于strtotime的簡單日期時間運(yùn)算技巧,非常具有實(shí)用價值,需要的朋友可以參考下2017-04-04PHP+jQuery實(shí)現(xiàn)雙擊修改table表格功能示例
這篇文章主要介紹了PHP+jQuery實(shí)現(xiàn)雙擊修改table表格功能,涉及php數(shù)組讀取、遍歷及jQuery動態(tài)響應(yīng)修改頁面元素屬性相關(guān)操作技巧,需要的朋友可以參考下2019-02-02PHP擴(kuò)展程序?qū)崿F(xiàn)守護(hù)進(jìn)程
守護(hù)進(jìn)程就是在后臺一直運(yùn)行的進(jìn)程。比如我們啟動的httpd,mysqld等進(jìn)程都是常駐內(nèi)存內(nèi)運(yùn)行的程序。,下面我們就來探討下,如何使用php來實(shí)現(xiàn)守護(hù)進(jìn)程2015-04-04php變量與JS變量實(shí)現(xiàn)不通過跳轉(zhuǎn)直接交互的方法
這篇文章主要介紹了php變量與JS變量實(shí)現(xiàn)不通過跳轉(zhuǎn)直接交互的方法,涉及php與javascript變量傳輸及代碼混編相關(guān)操作技巧,需要的朋友可以參考下2017-08-08關(guān)于查看MSSQL 數(shù)據(jù)庫 用戶每個表 占用的空間大小
本篇文章是對查看MSSQL數(shù)據(jù)庫用戶每個表占用的空間大小進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06