PHP 类的反射机制

时间:2022-10-26 21:27:57

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');
}