1. 程式人生 > >php 析構方法 詳解

php 析構方法 詳解

析構方法說明:
1.      析構方法會自動呼叫
2.      析構方法主要用於銷燬資源(比如釋放資料庫的連結,圖片資源...銷燬某個物件..);

解構函式會在到物件的所有的引用都被刪除或者當物件被顯示銷燬時執行.   

3.      析構方法呼叫順序是,先建立的物件後被銷燬
4.      析構方法什麼時候被呼叫
(1)    當程式(程序結束)退出時
(2)    當一個物件稱為垃圾物件的時候,該物件的析構方法也會被呼叫,
(3)    所謂垃圾物件,就是指,沒有任何變數再引用它.
(4)    一旦一個物件成為垃圾物件,析構方法就會立即呼叫

析構方法小結:
①php5加入的的析構方法function __destruct()
②析構方法沒有返回值也不接受引數
③主要作用是釋放資源的操作,並不是銷燬物件本身。
④在銷燬物件前,系統自動的呼叫該類的析構方法   
⑤一個類最多隻有一個析構方法。

析構方法例項1:

<?php
class Person
{
	public $name;
	public $age;
	public $conn;
              
	//構造方法
	public function __construct($name,$age)
	{
		$this->name=$name;
		$this->age=$age;
		//假設此處有一個開啟一個$conn連結資料庫資源的函式體
	}
	//寫一個析構方法 __ 是兩個下劃線
	function __destruct()
	{
		echo $this->name."      銷燬資源   關閉資料庫 . . <br/>";
	}
}
$p1=new Person("1.賈寶玉",16);
$p1=null; //$p1擲空是對其對應地址下標擲空,如$p1[0x678],即擲空了中括號中的資料,地址對應的數並沒有改變。
//$p1擲空馬上就要被銷燬,所以p1p2p3的銷燬順序為:$p1->$p3->$p2
$p2=new Person("2.林黛玉",14);

$p3=new Person("3.王熙鳳",15);
?>
析構方法例項2:
<?php
    //建立一個人類
    class Person
    {
        //下面是人的成員屬性
        public $name; //人的名子
        public $sex; //人的性別
        public $age; //人的年齡

        //定義一個構造方法引數為姓名$name、性別$sex和年齡$age
        public function __construct($name,$sex,$age)
        {   
		    //通過構造方法傳進來的$name給成員屬性$this->name賦初使值 
            $this->name=$name;
            //通過構造方法傳進來的$sex給成員屬性$this->sex賦初使值 
            $this->sex=$sex;
            //通過構造方法傳進來的$age給成員屬性$this->age賦初使值 
            $this->age=$age;
        }

        //這個人的說話方法
        function say()
        {
            echo "我的名子叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age."<br/>";
        } 

        //這是一個解構函式,在物件銷燬前呼叫
        function __destruct()
        {
            echo "再見".$this->name."<br/>";
        }
    }

    //通過構造方法建立3個物件$p1、p2、$p3,分別傳入三個不同的實參為姓名、性別和年齡
    $p1=new Person("張三","男", 20);
    $p2=new Person("李四","女", 30);
    $p3=new Person("王五","男", 40);

    //下面訪問$p1物件中的說話方法
    $p1->say();
    //下面訪問$p2物件中的說話方法
    $p2->say();
    //下面訪問$p3物件中的說話方法
    $p3->say();
?>
輸出結果如下: