PHP反射的优点,PHP 反射使用和理解
反射機制簡介
之前已經介紹過Java反射機制的簡單使用,所有的反射機制的思想作用等都是類似的,下面就一起來了解一下PHP反射機制。
個人理解:反射機制就是可以利用類名或者一個類的對象來獲取關于這個類的一系列信息(類的變量,方法),然后又就可以利用得到的類的信息實例化一些類的對象
官方給的簡介:反射 API,有 對類、接口、函數、方法和擴展進行反向工程的能力。 此外,反射 API 提供了方法來取出函數、類和方法中的文檔注釋。
一般在框架中使用到反射機制比較多(控制反轉),正常情況下一般使用不到反射的
反射機制的使用
常用的類
ReflectionClass 通過類名獲取類的信息
ReflectionObject 通過類的對象獲取類的信息
代碼,還以之前介紹Java反射的Worker類為例
worker.php:
class Worker{
//工人的一些屬性
private $name_;
private $age_;
private $salary_;
//構造方法
public function __construct($name,$age,$salary){
$this->name_ = $name;
$this->age_ = $age;
$this->salary_ = $salary;
}
//輸出工人信息的方法
public function show(){
echo "年齡".$this->salary_;
echo "姓名".$this->name_;
echo "工資".$this->salary_;
}
//__toString方法
public function __toString(){
return "年齡:".$this->age.",姓名:".$this->name."工資:".$this->salary;
}
}
下面可以通過反射機制獲取類的信息
注 getObjectOfRuntimeClass.php 該文件和worker.php 在一個文件夾下
include 'worker.php';
//通過類名獲取
$workClass_by_classname = new ReflectionClass('Worker');
//通過類的實例對象獲取
$w = new Worker("小明",20,20);
$workerClass_by_classinstance = new ReflectionObject($w);
//因為ReflectionObject是ReflectionClass的子類,所以workClass_by_classname的方法,workerClass_by_classinstance同樣適用
//下面利用workClass_by_classname對象獲取類的一些屬性
//獲取類名
echo $workClass_by_classname->getName();
//獲取類的方法列表
var_dump($workClass_by_classname->getMethods());
//獲取類的屬性
var_dump($workClass_by_classname->getProperties());
//利用反射得到方法,并執行該方法
$worker = $workClass_by_classname->newInstance("小明",20,20);
$show_method = new ReflectionMethod('Worker','show');
$show_method->invoke($worker);
//利用反射機制得到屬性,并設置值
$property = $workClass_by_classname->getProperty('name_');
$property->setAccessible(true);
var_dump($property->getValue($worker));
$property->setValue($worker ,'小紅');
var_dump($property->getValue($worker));
參考:https://www.cnblogs.com/phpper/p/8452520.html
除了這些外,PHP反射還有其他的功能,具體可參考PHP手冊的反射部分
如需轉載請注明出處:http://www.cnblogs.com/zhuchenglin/p/8890451.html
總結
以上是生活随笔為你收集整理的PHP反射的优点,PHP 反射使用和理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内存频率助力电竞梦想,成就顶尖玩家
- 下一篇: 怎么在php项目安装tp5框架,框架安装