PHP類的構造方法和析構方法

構造方法和析構方法是一種特殊的方法。構造方法,類被實例化時調用,用來給成員屬性賦初值,做一些準備工作;析構方法(無參數),在類的實例脫

離其作用域被銷燬時調用(自動調用),做一些諸如釋放內存等善後工作。


構造方法的語法格式爲;

function __construct(){

//方法實現細節

}

因爲構造方法是在類被實例化時調用的,因此並不是由實例化的類名加操作符->的形式調用,而是按照如下的語法格式調用:

變量名 = new 類名([構造方法的參數])

注意:如果類中沒有構造方法,PHP引擎會自動添加一個構造方法,其參數列表爲空,方法內容爲空


析構方法在類的實例被銷燬時自動調用,且無方法參數,格式如下;

function __destruct(){

//方法實現細節

}

注意:如果類中沒有定義析構函數,PHP引擎會自動添加一個析構方法,其方法內容爲空


兩者結合用法如下;

<?php

class Cat{

function __construct(){

echo '一個絕世的貓誕生了';

}

function __destruct(){

echo '來也匆匆,去也匆匆';

}

}

$c = new Cat();//實例化類,調用無參數的構造方法

//$c被銷燬時自動調用析構方法

?>

運行結果如下:

一個絕世的貓誕生了

來也匆匆,去也匆匆


關於構造方法和析構方法,這裏還有幾點補充說明:

<1>如果子類中沒有定義構造方法,則子類在實例化時會默認去 調用父類的構造方法。對於析構方法同樣如此,如果子類中沒有定義析構方法,則子類的實

例被銷燬時會默認調用父類的析構方法

<2>如果子類中定義了構造方法,則子類在實例化不會自動去調用父類的構造方法。對於析構方法同樣如此,如果子類中定義了析構方法,則子類的實例化被

銷燬的時候不會自動去調用父類的析構方法。

爲了在子類中調用父類的構造方法和析構方法,必須按如下語法格式顯示調用;

(1)顯示調用父類的構造方法

function __construct([子類的構造方法的參數]){     //定義子類的構造方法

…………

parent::__construct([父類的構造方法的參數]);     //顯示調用父類的構造方法

…………

}

(2)顯示調用父類的析構方法

function __destruct(){     //定義子類的析構方法

…………

parent::__destruct([父類的構造方法的參數]);     //顯示調用父類的析構方法

…………

}


用法如下所示:

/**

父類

*/

class Parent{

public $name; //共有屬性

private $age; //私有屬性


function __construct($name,$age){ //父類的構造方法

$this->name = $name;

$this->age = $age;

}

public function introduceMyself(){ //共有方法

echo '本府'.$this->name.'年方'.$this->age;

}


function __destruct(){ //類的析構方法

echo “來也匆匆,去也匆匆”;

}

}


/**

子類

*/

class Student extends Parent{

public $school; //共有屬性


function __construct($name,$age,$school){ //父類的構造方法

parent::__construct($name,$age); //顯示調用父類的構造方法

$this->school= $school;

}

public function getSchool(){ //共有方法

echo '俺來自大名鼎鼎的'.$this->school;

}


function __destruct(){ //子類的析構方法

echo “終於可以不用上學了”;

parent::__destruct();   //顯示的調用父類的析構方法

}

}


$s = new Student('默默',19,'城管小學'); //實例化子類,調用子類的構造方法

echo ‘本府行不改名坐不改姓,’.$s->name.'是也'; //調用繼承自父類的屬性

$s->introduceMyself(); //調用繼承自父類的方法

$s->getSchool(); //調用子類方法

//$s被銷燬,調用子類的析構方法


運行結果如下:

本府行不改名坐不改姓,默默是也

本府默默,年方19

俺來自大名鼎鼎的城管小學

終於可以不用上學了

來也匆匆,去也匆匆

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章