问题描述:
函数接收的一个参数存储了类名,想要动态的new出该类,并调用类中的方法
解决办法:使用php中的反射类
名词解释:PHP自5.0版本以后添加了反射机制,它提供了一套强大的反射API,允许你在PHP运行环境中,访问和使用类、方法、属性、参数和注释等,其功能十分强大,经常用于高扩展的PHP框架,自动加载插件,自动生成文档,甚至可以用来扩展PHP语言。由于它是PHP內建的oop扩展,为语言本身自带的特性,所以不需要额外添加扩展或者配置就可以使用。更多内容见官方文档。
直接看代码:
// 首先必须引入映射类
use ReflectionClass;
class Plan
{
public function display(Request $request){
$param = $request->param();
$class = new ReflectionClass('app\index\controller\Ipmodel'); // 建立 Ipmodel这个类的反射类
$instance = $class->newInstance(); // 实例化
$result = $instance->dataOut($param['plan_id']); // 调用类中的方法dataOut
$attr = $class->getConstant('CONFIG'); // 获取类中的属性CONFIG
$resData['code'] = 200;
$resData['data'] = $result;
return $resData;
}
}
这里重点注意的是:1:必须记得引入ReflectionClass
2:创建反射类时传送的类名,必须包含完整的命名空间,即使使用了 use 关键字。否则找不到类名会抛出异常。