《PHP教程:淺談PHP中的面向對象OOP中的魔術方法》要點:
本文介紹了PHP教程:淺談PHP中的面向對象OOP中的魔術方法,希望對您有用。如果有疑問,可以聯系我們。
一、什么是魔術方法:PHP教程
PHP為我們提供了一系列用__開頭的函數,這些函數無需自己手動調用,會在合適的時機自動調用,這類函數稱為魔術函數.
例如:PHP教程
function __construct(){}
在new一個新對象時自動調用此函數PHP教程
二、PHP中都有那些魔術方法,以及它們的作用:
PHP教程
1.__construct():構造函數,new對象時自動調用PHP教程
eg:PHP教程
class Person{ public $name; public $age; function __construct($name,$age){ $this->name=$name; $this->age=$age; } }
?在new新的Person對象時會自動調用__construct()函數,將傳入的參數分別賦給$name,$age.PHP教程
2.__destruct():析構函數,當一個對象被銷毀前自動調用PHP教程
class Person{ public $name; public $age; function __destruct(){ echo "這個對象被銷毀了"; } }
同上所述,對象被銷毀時執行此魔術方法PHP教程
3.__get():訪問類中私有屬性時自動調用,傳遞讀取屬性名,返回$this->屬性名PHP教程
class Person{ private $name; public $age; function __get($name){ return $this->$name; } }
如上代碼,$name被設為私有屬性后不能直接通過$this->name;的方式讀取,因此需要設置__get()魔術方法來讀取.PHP教程
4.__set():給類的私有屬性賦值時自動調用,傳遞需設置的屬性名,屬性值PHP教程
class Person{ private $name; public $age; function __set($key,$value){ $this->$key=$value; } }
同__get()方法,私有屬性不能通過$this->name="aaa";的方式直接設置,需要設置__set()方法,傳入的參數分別是屬性名和屬性值.PHP教程
5.__isset():使用isset檢測對象私有屬性時調用,傳遞檢測的屬性名,返回isset($this->屬性名)PHP教程
class Person{ private $name; public $age; function __isset($name){ return isset($this->$name); } }
使用isset檢測對象私有屬性時調用,其他同上.PHP教程
6.__unset():使用unset()函數刪除對象私有屬性時調用,傳遞刪除的屬性名,方法中執行unset($this->屬性名)PHP教程
class Person{ private $name; public $age; function __unset($name){ unset($this->$name); } }
同上,在用unset()函數刪除私有屬性時調用.PHP教程
7.__toString():使用echo打印對象時調用,返回打印對象時想要顯示的內容,返回必須是字符串PHP教程
class Person{ public $name; public $age; function __toString(){ $str = <<<str 您要打印的內容是:<br> \$name=>{$this->name};<br> \$age=>{$this->age};<br> str; return $str; } }
使用echo打印對象時調用,返回打印對象時想要顯示的內容.PHP教程
8.__call():調用一個類中未定義的或未公開的方法時自動調用,傳遞被調用的函數名及參數列表PHP教程
class Person{ public $name; public $age; function __call($funcName,$funcParams){ echo "您調用的函數{$funcName},參數列表"; print_r($funcParams); echo "不存在/未公開"; } } $zhangsan=new Person(); $zhangsan->say(1,2,3);
如代碼所示,調用不存在的say(1,2,3);時,會打印PHP教程
您調用的函數way,參數列表Array ( [0] => 123 ) 不存在PHP教程
9.__clone():當使用clone關鍵字,克隆一個對象時自動調用,作用是為新克隆的對象初始化賦值PHP教程
class Person{ public $name; public $age; function __clone(){ $this->name="lisi"; } } $zhangsan=new Person("zhangsan",24); $lisi=clone $zhangsan; echo $lisi->name;
打印出的結果是"lisi",而不是"zhangsan".PHP教程
10.__sleep():對象序列化時自動調用,返回一個數組,數組中的值就是可以序列化的屬性PHP教程
class Person{ public $name; public $age; function __sleep(){ return array("name","age"); } }
如上述代碼,在用serialize()序列化對象時只有"name","age"屬性會被序列化.PHP教程
11.__wakeup():對象反序列化時自動調用,為反序列化新產生的對象進行初始化賦值PHP教程
class Person{ public $name; public $age; function __wakeup(){ $this -> name = "lisi"; } }
將對象序列化后再反序列化,同時給對象的name屬性賦初值為"lisi".PHP教程
12.__autolode():需要在類外部聲明函數,當實例化一個未聲明的類時自動調用,傳遞實例化的類名,可以使用類名自動加載對應的類文件.PHP教程
function __autoload($className){ include "class/".strtolower($className).".class.php"; } $zhangsan=new Person(); $zhangsan->say();
如上述代碼,Person類不存在時調用__autolode()方法,載入寫在文件外的類,"class/".strtolower($className).".class.php";就是類文件的相對路徑,$className就是PHP教程
不在本文件中的類的類名,因此在創建外部類文件時命名方式必須是小寫的類名.class.php.__autolode()方法也是惟一一個不用寫在類中的魔術方法.PHP教程
以上就是PHP中的魔術方法,合理利用這些方法可以輕松實現對象的各種操作.希望對大家的學習有所幫助,也希望大家多多支持維易PHP.PHP教程
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/640.html