久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

淺談PHP中的面向?qū)ο驩OP中的魔術(shù)方法

本篇文章主要介紹了淺談PHP中的面向?qū)ο驩OP中的魔術(shù)方法 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

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

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

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

1.__construct():構(gòu)造函數(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():析構(gòu)函數(shù),當一個對象被銷毀前自動調(diào)用

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

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

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

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

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

4.__set():給類的私有屬性賦值時自動調(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檢測對象私有屬性時調(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關(guān)鍵字,克隆一個對象時自動調(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():對象序列化時自動調(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"。

【網(wǎng)站聲明】本站除付費源碼經(jīng)過測試外,其他素材未做測試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請勿用于商業(yè)用途。如損害你的權(quán)益請聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

這篇文章主要介紹了php魔法函數(shù)與魔法常量的相關(guān)知識介紹,需要的朋友可以參考下
這篇文章主要介紹了PHP魔術(shù)方法之__call與__callStatic方法,需要的朋友可以參考下
主站蜘蛛池模板: 亚洲天堂av在线 | h片在线观看免费 | www.9191| 久久久久九九九女人毛片 | 99精彩视频 | 国产成人一区 | 欧美日韩一区二区电影 | 在线观看免费av网 | 四虎成人精品永久免费av九九 | 偷拍亚洲色图 | jav成人av免费播放 | 一区二区三区免费 | 性视频一区 | 国产精品s色| 日韩视频a| 一级黄色录像毛片 | 亚州精品成人 | 最新91在线 | 国产亚洲一区二区三区在线 | 亚洲一区二区视频在线观看 | 国产精品高清一区二区 | 日韩视频观看 | 国产一级特黄aaa大片评分 | 激情欧美一区二区三区中文字幕 | 国产一区不卡 | 日韩精品久久久久 | 久久久久国产精品www | 国产欧美精品一区二区三区 | 91免费看片 | 国产乱码精品一品二品 | 亚洲va国产日韩欧美精品色婷婷 | 亚洲激情第一页 | 性色av一区| 在线观看成人小视频 | 久久88 | 日韩免费一区二区 | 91看片免费版 | 久久中文字幕一区 | 日韩视频在线免费观看 | 亚洲高清在线观看 | 久久新 |