大多數類都有一種稱為構造函數的特殊方法。當創建一個對象時,它將自動調用構造函數,也就是使用new這個關鍵字來實例化對象的時候自動調用構造方法。構 造函數的聲明與其它操作的聲明一樣,只是其名稱必須是__construct( )。這是PHP5中的變化,以前的版本中,構造函數的名稱必須與類名相同,這種在PHP5中仍然可以用,但現在以經很少有人用了,這樣做的好處是可以使構 造函數獨立于類名,當類名發生改變時不需要改相應的構造函數名稱了。為了向下兼容,如果一個類中沒有名為__construct( )的方法,PHP將搜索一個php4中的寫法,與類名相同名的構造方法。
格式:function __construct ( [參數] ) { ... ... }
在一個類中只能聲明一個構造方法,而是只有在每次創建對象的時候都會去調用一次構造方法,不能主動的調用這個方法,所以通常用它執行一些有用的初始化任務。比如對成屬性在創建對象的時候賦初值。
~~~
1 <?
2 //創建一個人類
3 class Person
4 {
5 //下面是人的成員屬性
6 var $name; //人的名子
7 var $sex; //人的性別
8 var $age; //人的年齡
9
10 //定義一個構造方法參數為姓名$name、性別$sex和年齡$age
11 function __construct($name, $sex, $age) {
12 //通過構造方法傳進來的$name給成員屬性$this->name賦初使值
13 $this->name = $name;
14 //通過構造方法傳進來的$sex給成員屬性$this->sex賦初使值
15 $this->sex = $sex;
16 //通過構造方法傳進來的$age給成員屬性$this->age賦初使值
17 $this->age = $age;
18 }
19
20 //這個人的說話方法
21 function say() {
22 echo "我的名子叫:" . $this->name . " 性別:" . $this->sex . " 我的年齡是:" . $this->age;
23 }
24 }
25
26 //通過構造方法創建3個對象$p1、p2、$p3,分別傳入三個不同的實參為姓名、性別和年齡
27 $p1 = new Person("張三","男", 20);
28 $p2 = new Person("李四","女", 30);
29 $p3 = new Person("王五","男", 40);
30
31 //下面訪問$p1對象中的說話方法
32 $p1->say();
33 //下面訪問$p2對象中的說話方法
34 $p2->say();
35 //下面訪問$p3對象中的說話方法
36 $p3->say();
37 ?>
~~~
輸出結果為:
我的名子叫:張三 性別:男 我的年齡是:20我的名子叫:李四 性別:女 我的年齡是:30我的名子叫:王五 性別:男 我的年齡是:40
析構函數:
與構造函數相對的就是析構函數。析構函數是PHP5新添加的內容,在PHP4中沒有析構函數。 析構函數允許在銷毀一個類之前執行的一些操作或完成一些功能,比如說關閉文件, 釋放結果集等,析構函數會在到某個對象的所有引用都被刪除或者當對象被顯式銷毀時執行,也就是對象在內存中被銷毀前調用析構函數。與構造函數的名稱類似, 一個類的析構函數名稱必須是__destruct( )。析構函數不能帶有任何參數。
格式:function __destruct ( ) { ... ... }
~~~
1 <?
2 //創建一個人類
3 class Person
4 {
5 //下面是人的成員屬性
6 var $name; //人的名子
7 var $sex; //人的性別
8 var $age; //人的年齡
9
10 //定義一個構造方法參數為姓名$name、性別$sex和年齡$age
11 function __construct($name, $sex, $age) {
12 //通過構造方法傳進來的$name給成員屬性$this->name賦初使值
13 $this->name = $name;
14 //通過構造方法傳進來的$sex給成員屬性$this->sex賦初使值
15 $this->sex = $sex;
16 //通過構造方法傳進來的$age給成員屬性$this->age賦初使值
17 $this->age = $age;
18 }
19
20 //這個人的說話方法
21 function say() {
22 echo "我的名子叫:" . $this->name . " 性別:" . $this->sex . " 我的年齡是:" . $this->age;
23 }
24
25 //這是一個析構函數,在對象銷毀前調用
26 function __destruct() {
27 echo "再見" . $this->name;
28 }
29 }
30
31 //通過構造方法創建3個對象$p1、p2、$p3,分別傳入三個不同的實參為姓名、性別和年齡
32 $p1 = new Person("張三", "男", 20);
33 $p2 = new Person("李四", "女", 30);
34 $p3 = new Person("王五", "男", 40);
35
36 //下面訪問$p1對象中的說話方法
37 $p1->say();
38 //下面訪問$p2對象中的說話方法
39 $p2->say();
40 //下面訪問$p3對象中的說話方法
41 $p3->say();
42 ?>
~~~
輸出結果為:
我的名子叫:張三 性別:男 我的年齡是:20我的名子叫:李四 性別:女 我的年齡是:30我的名子叫:王五 性別:男 我的年齡是:40
再見王五
再見李四
再見張三
注意:
由于類實例是以堆棧的形式放在內存中,所以最后調用 析構函數 的時候,輸出順序是按 后進先出 的原則!
- 1.什么是面向對象
- 2.什么是類,什么是對象,類和對象這間的關系
- 3.什么是面向對象編程呢
- 4.如何抽象出一個類
- 5.如何實例化對象
- 6.如何去使用對象中的成員
- 7.特殊的引用this的使用
- 8.構造方法__construct()與析構方法__destruct()
- 9.封裝性(var與public,protected,private的關系)
- 10.__set(),__get(),__isset(),__unset()四個方法的應用
- 11.類的繼承
- 12.重載新的方法(parent::)
- 13.訪問類型(public,protected,private)
- 14.final關鍵字的應用
- 15.static和const關鍵字的使用(self::)
- 16.__toString()方法
- 17.克隆對象__clone()方法
- 18.__call()處理調用錯誤
- 19.抽象方法和抽象類(abstract)
- 20.PHP5接口技術(interface)
- 21.多態的應用
- 22.把對象串行化serialize()方法,__sleep()方法,__wakeup()方法
- 23.自動加載類 __autoload()函數