天天看點

PHP中的面向對象OOP中的魔術方法

一、什麼是魔術方法:

PHP為我們提供了一系列用__開頭的函數,這些函數無需自己手動調用,會在合适的時機自動調用,這類函數稱為魔術函數。

例如:

<a href="http://blog.51cto.com/13013670/1943955#">?</a>

<code>function</code> <code>__construct(){} 在</code><code>new</code><code>一個新對象時自動調用此函數</code>

二、PHP中都有那些魔術方法,以及它們的作用:

1.__construct():構造函數,new對象時自動調用

eg:

在new新的Person對象時會自動調用__construct()函數,将傳入的參數分别賦給$name,$age。

2.__destruct():析構函數,當一個對象被銷毀前自動調用

同上所述,對象被銷毀時執行此魔術方法

3.__get():通路類中私有屬性時自動調用,傳遞讀取屬性名,傳回$this-&gt;屬性名

如上代碼,$name被設為私有屬性後不能直接通過$this-&gt;name;的方式讀取,是以需要設定__get()魔術方法來讀取。

4.__set():給類的私有屬性指派時自動調用,傳遞需設定的屬性名,屬性值

同__get()方法,私有屬性不能通過$this-&gt;name="aaa";的方式直接設定,需要設定__set()方法,傳入的參數分别是屬性名和屬性值。

5.__isset():使用isset檢測對象私有屬性時調用,傳遞檢測的屬性名,傳回isset($this-&gt;屬性名)

使用isset檢測對象私有屬性時調用,其他同上。

6.__unset():使用unset()函數删除對象私有屬性時調用,傳遞删除的屬性名,方法中執行unset($this-&gt;屬性名)

同上,在用unset()函數删除私有屬性時調用。

7.__toString():使用echo列印對象時調用,傳回列印對象時想要顯示的内容,傳回必須是字元串

使用echo列印對象時調用,傳回列印對象時想要顯示的内容。

8.__call():調用一個類中未定義的或未公開的方法時自動調用,傳遞被調用的函數名及參數清單

如代碼所示,調用不存在的say(1,2,3);時,會列印

您調用的函數way,參數清單Array ( [0] =&gt; 123 ) 不存在

9.__clone():當使用clone關鍵字,克隆一個對象時自動調用,作用是為新克隆的對象初始化指派

列印出的結果是"lisi",而不是"zhangsan"。

10.__sleep():對象序列化時自動調用,傳回一個數組,數組中的值就是可以序列化的屬性

如上述代碼,在用serialize()序列化對象時隻有"name","age"屬性會被序列化。

11.__wakeup():對象反序列化時自動調用,為反序列化新産生的對象進行初始化指派

将對象序列化後再反序列化,同時給對象的name屬性賦初值為"lisi"。

12.__autolode():需要在類外部聲明函數,當執行個體化一個未聲明的類時自動調用,傳遞執行個體化的類名,可以使用類名自動加載對應的類檔案。

如上述代碼,Person類不存在時調用__autolode()方法,載入寫在檔案外的類,"class/".strtolower($className).".class.php";就是類檔案的相對路徑,$className就是

不在本檔案中的類的類名,是以在建立外部類檔案時命名方式必須是小寫的類名.class.php。__autolode()方法也是惟一一個不用寫在類中的魔術方法。

以上就是PHP中的魔術方法,合理利用這些方法可以輕松實作對象的各種操作。

本文轉自 bxst 51CTO部落格,原文連結:http://blog.51cto.com/13013670/1943955