1. 程式人生 > >PHP 反射的實現

PHP 反射的實現

理解 pub col 動態調用 getname 直觀 出發 對象 reac

反射

反射,直觀理解就是根據到達地找到出發地和來源。比如,一個光禿禿的對象,我們可以僅僅通過這個對象就能知道它所屬的類、擁有哪些方法。

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

反射其實不難理解,我們先舉個反射示例

<?php
class person{
    public $name;
    public $gender;
    public function say(){
        echo $this->name," \tis ",$this
->gender,"\r\n"; } public function set($name, $value) { echo "Setting $name to $value \r\n"; $this->$name= $value; } public function get($name) { if(!isset($this->$name)){ echo ‘未設置默認值‘; $this->$name="正在為你設置默認值2018新年快樂"; }
return $this->$name; } } $student=new person(); $student->name=‘Tom‘; $student->gender=‘male‘; $student->age=24;

以上示例只是簡單賦值,實例化,現在,要獲取這個student對象的方法和屬性列表該怎麽做呢?如以下代碼所示:

//反射實現
// 獲取對象屬性列表
$reflect = new ReflectionObject($student);
$props= $reflect->getProperties();
echo‘獲取對象屬性列表‘."\n";
foreach ($props as $prop) { print $prop->getName() ."\n"; } // 獲取對象方法列表 echo‘獲取對象方法列表‘."\n"; $m=$reflect->getMethods(); foreach ($m as $prop) { print $prop->getName() ."\n"; }

PHP 反射的實現