析構函數:當某個對象成為垃圾或者當對象被顯式銷毀時執行。
__destruct() 析構函數,是在垃圾對象被回收時執行。
注意: 1、不要在程序中調用一個對象的析構函數。2、析構函數不能帶有參數。
通常在程序結束後PHP會自動執行垃圾回收,但你想在這個過程中干些什麼就可以用到析構函數了。
看個例子:
<?php
class Bike
{
function __destruct()
{
echo "結束的時候會看到這句話";
}
}
$myBike = new Bike();
for($i=0;$i<5;$i++)
echo $i;
?>
上面的代碼執行後會看到頁面在顯示完0到4的數字後就會出現“結束的時候會看到這句話”。這就說明程序已經結束了。
銷毀已經建立的對象
如果要在執行其他程序前先把某個對象給銷毀,可以使用$對象變量名 = null 的方法。
那麼使用unset($對象變量名)是否可以銷毀對象呢?答案是,unset只能回收指向對象的變量而不是這個對象,但當所有指向同一對象的變量都被unset後該變量會被銷毀。
看兩個簡單的例子,首先是 = null 的情況
<?php
class Bike
{
function __destruct()
{
echo "結束的時候會看到這句話";
}
}
$myBike = new Bike();
$myBike = null;
for($i=0;$i<5;$i++)
echo $i;
?>
執行後會發現,在循環輸出0到4之前析構函數就被執行了。
再看看unset的情況:
<?php
class Bike
{
function __destruct()
{
echo "結束的時候會看到這句話";
}
}
$myBike = new Bike();
$youBike = $myBike; //變量youBike也指向了對象
unset($myBike); //這裡還不會出現"結束的時候會看到這句話",因為只是回收了變量$myBike
for($i=0;$i<5;$i++)
echo $i;
unset($youBike);
//這裡就會輸出了,因為在回收$youBike這個變量的同時所有指向Bike的對象變量都沒了
?>