PHP中面向?qū)ο驩OP的魔術(shù)方法有哪些-創(chuàng)新互聯(lián)

這篇文章主要介紹了PHP中面向?qū)ο驩OP的魔術(shù)方法有哪些,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)主營馬鞍山網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶App定制開發(fā),馬鞍山h5重慶小程序開發(fā)搭建,馬鞍山網(wǎng)站營銷推廣歡迎馬鞍山等地區(qū)企業(yè)咨詢

一、什么是魔術(shù)方法:

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

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

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


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

eg:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

7.__toString():使用echo打印對象時(shí)調(diào)用,返回打印對象時(shí)想要顯示的內(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打印對象時(shí)調(diào)用,返回打印對象時(shí)想要顯示的內(nèi)容。

8.__call():調(diào)用一個(gè)類中未定義的或未公開的方法時(shí)自動(dòng)調(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);時(shí),會(huì)打印

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

9.__clone():當(dāng)使用clone關(guān)鍵字,克隆一個(gè)對象時(shí)自動(dòng)調(diào)用,作用是為新克隆的對象初始化賦值

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

打印出的結(jié)果是"lisi",而不是"zhangsan"。

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

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

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

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

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

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

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

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

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

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

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“PHP中面向?qū)ο驩OP的魔術(shù)方法有哪些”這篇文章對大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,,關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

新聞標(biāo)題:PHP中面向?qū)ο驩OP的魔術(shù)方法有哪些-創(chuàng)新互聯(lián)
當(dāng)前路徑:http://bm7419.com/article34/hdise.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、Google、網(wǎng)站內(nèi)鏈網(wǎng)站設(shè)計(jì)公司動(dòng)態(tài)網(wǎng)站、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司