首頁  >  文章  >  後端開發  >  php反射的原理

php反射的原理

(*-*)浩
(*-*)浩原創
2019-09-03 13:51:473188瀏覽

php反射的原理

什麼是反射呢?

在PHP的物件導向程式設計中的對象,它被系統賦予自省的能力,而這個自省的過程,我們把它叫做反射。

我們對反射的直觀理解可以是,根據達到地,找到出發地和來源這麼一個過程,通俗來講就是,我給你一個光禿禿的對象,完事你可以根據這個對象,知道它所屬的類,擁有哪些方法。

在PHP中,反射是指在PHP運行狀態中,擴展分析PHP程序,導出或提取出關於類別、屬性、方法、參數等的詳細信息,包括註釋。這種動態擷取資訊以及動態呼叫物件方法的功能,稱為反射API。

我們接下來透過一段程式碼來感受下:

class person{
    public $name;
    public $age;
 
    public function say()
    {
        echo $this->name."<br>".$this->age;
    }
 
    public function set($name,$value)
    {
        echo &#39;set name to value&#39;;
        $this->$name = $value;
    }
 
    public function get($name)
    {
        if(!isset($this->$name)){
            echo &#39;unset name&#39;;
            $this->$name = &#39;seting~~~&#39;;
        }
 
        return $this->$name;
    }
}
 
$stu = new person();
$stu->name = &#39;luyaran&#39;;
$stu->age = 26;
$stu->sex = &#39;girl&#39;;

上述程式碼是一個簡單的類,我們透過實例化它,以及賦值,讓它含有意義。

完事,我們就來透過反射API來取得這個stu物件的方法和屬性的一個列表:

//获取对象的属性列表
$reflect = new ReflectionObject($stu);
$props = $reflect->getProperties();
foreach ($props as $key_p => $value_p) {
    var_dump($value_p->getName());
}
//获取对象的方法列表
$method = $reflect->getMethods();
foreach ($method as $key_m => $value_m) {
    var_dump($value_m->getName());
}

同時呢,反射不僅可以用作類別和對象,還可以用於函數,擴充模組,異常等。

咱們呢,在這裡就不贅述了,最後一點篇幅,就來聊聊反射的一些作用。

首先,它可以用作文件生成,所以,我們可以用它對文件中的類別進行掃描,逐一生成掃描文件。

反射可以探知類別的內部結構,也可以用作hook來實現插件功能,還有就是可以做動態代理。

以上是php反射的原理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn