PHP 类的反射机制
一、何为反射
反射就是根据到达地找到出发地和来源;也就是通过一个对象来得到所属的类、方法和属性等;
到达地其实也可以看成对象的在项目中的绝对路径,例如\App\Libraries\Express\Api\ZhongTongApi
在php运行状态中,扩展分析php程序,提取出关于类、方法、属性、参数、注释等信息;
二、反射的作用
1、反射可以用于生成文档,我们知道它能真实反映一个对象的几乎所有内容,那么我们就可以对类进行扫描,生成扫描文档;
2、利用反射机制可以动态加载对象,获取对应对象的属性和方法等信息;
二、反射的应用
有时候我们有好多对象,但是我们有不清楚该匹配哪个对象,这个时候我们可以动态的来加载对象,就用到了反射机制;
现在我们有个对象的映射关系,将其放入一个映射类中:
private $express_map = [ '115' => '\App\Libraries\Express\Api\ZhongTongApi', '122' => '\App\Libraries\Express\Api\KuaiJieApi', ];
我们新建一个类来动态的加载这里的对象,并使用反射获取对象中的方法;
//获取对象映射关系 $expressMap = new SubExpressMappings(); $expressMappings = $expressMap->getExpressMap(); if (isset($expressMappings[$shipping_id])) { //获取对象的绝对路径 $expressName = $expressMappings[$shipping_id]; if (class_exists($expressName)) { //建立一个反射类 $apiClass = new \ReflectionClass($expressName); //实例化一个对象 $expressApi = $apiClass->newInstance(); //通过这个对象获取方法 $expressApi->subscribeExpressMailNo(); } else { app('log')->Error('SubExpressMappings : ' . $expressName . ' not exist'); } } else { app('log')->Error($shipping_id . ' not in app.sub_express_mappings'); }