PHP 反射的實現
阿新 • • 發佈:2018-02-18
理解 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 反射的實現