8.構造方法與析構方法
大多數類都有一種稱為構造函數的特殊方法。當創建一個對象時,它將自動調用構造函
數,也就是使用new 這個關鍵字來實例化對象的時候自動調用構造方法。
構造函數的聲明與其它操作的聲明一樣,只是其名稱必須是__construct( )。這是PHP5 中
的變化,以前的版本中,構造函數的名稱必須與類名相同,這種在PHP5 中仍然可以用,但
現在以經很少有人用了,這樣做的好處是可以使構造函數獨立於類名,當類名發生改變時不
需要改相應的構造函數名稱了。為了向下兼容,如果一個類中沒有名為__construct( )的方法,
PHP 將搜索一個php4 中的寫法,與類名相同名的構造方法。
格式:function __construct ( [參數] ) { ... ... }
在一個類中只能聲明一個構造方法,而是只有在每次創建對象的時候都會去調用一次構
造方法,不能主動的調用這個方法,所以通常用它執行一些有用的初始化任務。比如對成屬
性在創建對象的時候賦初值。
代碼片段
復制代碼 代碼如下:
<?
//創建一個人類
class Person{
//下面是人的成員屬性
var $name; //人的名字
var $sex; //人的性別
var $age; //人的年齡
//定義一個構造方法參數為姓名$name、性別$sex和年齡$age
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>";
}
}
//通過構造方法創建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();
?>
輸出結果為:
我的名字叫:張三性別:男我的年齡是:20
我的名字叫:李四性別:女我的年齡是:30
我的名字叫:王五性別:男我的年齡是:40
如圖:
析構函數:
與構造函數相對的就是析構函數。析構函數是PHP5 新添加的內容,在PHP4 中沒有析
構函數。析構函數允許在銷毀一個類之前執行的一些操作或完成一些功能,比如說關閉文件,
釋放結果集等,析構函數會在到某個對象的所有引用都被刪除或者當對象被顯式銷毀時執行,
也就是對象在內存中被銷毀前調用析構函數。與構造函數的名稱類似,一個類的析構函數名
稱必須是__destruct( )。析構函數不能帶有任何參數。
格式:function __destruct ( ) { ... ... }
代碼片段
復制代碼 代碼如下:
<?
//創建一個人類
class Person{
//下面是人的成員屬性
var $name; //人的名字
var $sex; //人的性別
var $age; //人的年齡
//定義一個構造方法參數為姓名$name、性別$sex和年齡$age
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();
?>
輸出結果為:
我的名字叫:張三性別:男我的年齡是:20
我的名字叫:李四性別:女我的年齡是:30
我的名字叫:王五性別:男我的年齡是:40
再見張三
再見李四
再見王五