反射機制的簡答理解

laraverer發表於2021-06-08

什麼是翻身呢?
在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 'set name to value';
        $this->$name = $value;
    }

    public function get($name)
    {
        if(!isset($this->$name)){
            echo 'unset name';
            $this->$name = 'seting~~~';
        }

        return $this->$name;
    }
}

$stu = new person();
$stu->name = 'luyaran';
$stu->age = 26;
$stu->sex = 'girl';

上述程式碼是一個簡單的類,我們透過例項化它,以及賦值,讓它有意義。
完事,我們透過反射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());
}

除了反射API之外,我們還可以使用class函式來獲取物件的各種屬性以及方法的資料,如下:

//獲取物件的屬性的關聯陣列
var_dump(get_object_vars($stu));

//獲取類屬性
var_dump(get_class_vars(get_class($stu)));

//獲取類的方法名稱組成的陣列
var_dump(get_class_methods(get_class($stu)))


待續…..

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章