什麼是反射呢?
在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()); }
同時呢,反射不僅可以用作類別和對象,還可以用於函數,擴充模組,異常等。
咱們呢,在這裡就不贅述了,最後一點篇幅,就來聊聊反射的一些作用。
首先,它可以用作文件生成,所以,我們可以用它對文件中的類別進行掃描,逐一生成掃描文件。
反射可以探知類別的內部結構,也可以用作hook來實現插件功能,還有就是可以做動態代理。
以上是php反射的原理的詳細內容。更多資訊請關注PHP中文網其他相關文章!