前言
今天在实现项目需求的时候看到了
ReflectionClass
类,后面去了解了一下php的反射原理,下面总结了一下反射最简单的用法
原理
面向对象编程中对象被赋予了自省的能力,而这个自省的过程就是反射。
反射,直观理解就是根据到达地找到出发地和来源。比如,一个光秃秃的对象,我们可以仅仅通过这个对象就能知道它所属的类、拥有哪些方法。
反射是指在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="正在为你设置默认值";
}
return $this->$name;
}
}
// 初始化 ReflectionClass 类
$reflect = new ReflectionObject($className);
// 从指定的参数创建一个新的类实例
$a = $reflect->newInstance();
// 调用类中的set方法
$res = $reflect->getMethod('set')->invoke($a);
总结
反射处很多反射,比如可以用于文档生成。因此可以用它对文件里的类进行扫描,逐个生成描述文档。
具体参考:https://www.php.net/manual/zh/book.reflection.php
还不快抢沙发