国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

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

2024-05-04 23:58:00
字體:
來源:轉載
供稿:網(wǎng)友

一、什么是魔術方法:

PHP為我們提供了一系列用__開頭的函數(shù),這些函數(shù)無需自己手動調(diào)用,會在合適的時機自動調(diào)用,這類函數(shù)稱為魔術函數(shù)。
例如:

function __construct(){} 在new一個新對象時自動調(diào)用此函數(shù)

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

1.__construct():構造函數(shù),new對象時自動調(diào)用

eg:

class Person{    public $name;    public $age;        function __construct($name,$age){      $this->name=$name;      $this->age=$age;    }}

 在new新的Person對象時會自動調(diào)用__construct()函數(shù),將傳入的參數(shù)分別賦給$name,$age。

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

class Person{    public $name;    public $age;        function __destruct(){    echo "這個對象被銷毀了";  }}

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

3.__get():訪問類中私有屬性時自動調(diào)用,傳遞讀取屬性名,返回$this->屬性名

class Person{    private $name;    public $age;        function __get($name){     return $this->$name;    }}

如上代碼,$name被設為私有屬性后不能直接通過$this->name;的方式讀取,因此需要設置__get()魔術方法來讀取。

4.__set():給類的私有屬性賦值時自動調(diào)用,傳遞需設置的屬性名,屬性值

class Person{    private $name;    public $age;        function __set($key,$value){      $this->$key=$value;    }}

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

5.__isset():使用isset檢測對象私有屬性時調(diào)用,傳遞檢測的屬性名,返回isset($this->屬性名)

class Person{    private $name;    public $age;        function __isset($name){    return isset($this->$name);  }}

使用isset檢測對象私有屬性時調(diào)用,其他同上。

6.__unset():使用unset()函數(shù)刪除對象私有屬性時調(diào)用,傳遞刪除的屬性名,方法中執(zhí)行unset($this->屬性名)

class Person{    private $name;    public $age;        function __unset($name){      unset($this->$name);    }}

同上,在用unset()函數(shù)刪除私有屬性時調(diào)用。

7.__toString():使用echo打印對象時調(diào)用,返回打印對象時想要顯示的內(nèi)容,返回必須是字符串

class Person{    public $name;    public $age;        function __toString(){      $str = <<<str      您要打印的內(nèi)容是:<br>      /$name=>{$this->name};<br>      /$age=>{$this->age};<br>str;      return $str;    }}

使用echo打印對象時調(diào)用,返回打印對象時想要顯示的內(nèi)容。

8.__call():調(diào)用一個類中未定義的或未公開的方法時自動調(diào)用,傳遞被調(diào)用的函數(shù)名及參數(shù)列表

class Person{    public $name;    public $age;        function __call($funcName,$funcParams){      echo "您調(diào)用的函數(shù){$funcName},參數(shù)列表";      print_r($funcParams);      echo "不存在/未公開";    }}$zhangsan=new Person();$zhangsan->say(1,2,3);

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

您調(diào)用的函數(shù)way,參數(shù)列表Array ( [0] => 123 ) 不存在

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

class Person{    public $name;    public $age;        function __clone(){    $this->name="lisi";    }}  $zhangsan=new Person("zhangsan",24);$lisi=clone $zhangsan;echo $lisi->name;

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

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

class Person{    public $name;    public $age;       function __sleep(){    return array("name","age");  }}

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

11.__wakeup():對象反序列化時自動調(diào)用,為反序列化新產(chǎn)生的對象進行初始化賦值

class Person{    public $name;    public $age;       function __wakeup(){    $this -> name = "lisi";  }}

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

12.__autolode():需要在類外部聲明函數(shù),當實例化一個未聲明的類時自動調(diào)用,傳遞實例化的類名,可以使用類名自動加載對應的類文件。

function __autoload($className){  include "class/".strtolower($className).".class.php";}  $zhangsan=new Person();$zhangsan->say();

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

不在本文件中的類的類名,因此在創(chuàng)建外部類文件時命名方式必須是小寫的類名.class.php。__autolode()方法也是惟一一個不用寫在類中的魔術方法。

以上就是PHP中的魔術方法,合理利用這些方法可以輕松實現(xiàn)對象的各種操作。希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關教程知識閱讀請移步到PHP教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 淮安市| 台州市| 凌源市| 芦山县| 余姚市| 林西县| 乐山市| 广河县| 绿春县| 讷河市| 莎车县| 年辖:市辖区| 平凉市| 方城县| 循化| 汶上县| 共和县| 金乡县| 府谷县| 惠水县| 玛曲县| 四会市| 余江县| 山阴县| 崇礼县| 罗平县| 江门市| 大田县| 凤山市| 长兴县| 景洪市| 察隅县| 侯马市| 灌南县| 凤城市| 陈巴尔虎旗| 乾安县| 宣汉县| 天门市| 桃园市| 永康市|