利用反射类来获取代码中提供的接口
2018-03-05 00:00
375 查看
<?php /** * Created by PhpStorm. * User: Zhoulang * Date: 2018/1/12 * Describe: 利用反射类来获取本项目所有对应的非静态、非析构、非构造的方法(获取控制器访问节点) */ namespace app\common\traits; use \ReflectionClass; use \ReflectionMethod; trait AuthNodes { /** * @return array */ public function getModuleAuthNodes(){ $path = APP_PATH; $fileList = scandir($path); $ListArr = []; //遍历模块 foreach($fileList as $key=>$value){ $nowPath = $path.$value; if($value!=='.' && $value!=='..' && is_dir($nowPath)){ $nowPathLi = $nowPath.DIRECTORY_SEPARATOR.'controller'; $fileListLi = scandir($nowPathLi); //遍历模块中的控制器 foreach($fileListLi as $k=>$v){ $liPath = $nowPathLi.DIRECTORY_SEPARATOR.$v; if($value!=='.' && $value!=='..' && is_file($liPath)){ // && //文件后缀名 $extArr = explode('.',$v); $ext = end($extArr); if($ext!=='php') continue; $ListArr[$value][$extArr[0]] = []; } } } } foreach($ListArr as $key=>$value){ $module = $key; foreach($ListArr[$key] as $k=>$v){ $controller = $k; $classNamespacePath = "app\\{$module}\\controller\\{$controller}"; $ListArr[$key][$k] = $this->getClassFunction($classNamespacePath); } } return $ListArr; } protected function getClassFunction($classNamespacePath){ $reflection = new ReflectionClass($classNamespacePath); $publicFuncs = $reflection->getMethods(ReflectionMethod::IS_PUBLIC); //ReflectionClass::getConstructor $funcs = []; foreach($publicFuncs as $key=>$value){ //不是构造方法 不是析构方法 也不是静态方法 if(!$value->isConstructor() && !$value->isDestructor() && !$value->isStatic()){ //获取方法注释信息 $funcDoc = $value->getDocComment(); //方法描叙 $describe = ''; //正则匹配出 /** info: xxxx */ 格式的注释 中的 info:xxxxxxxx if($funcDoc){ $preg_match = []; $result = preg_match('/info[\s]?[\:|\:]{1}[\s]?([\S]*)/',$funcDoc,$preg_match); if($result){ $describe = $preg_match[1]; } } $funcs[$value->name] = [ 'info' => $describe ]; } } return $funcs; } }
相关文章推荐
- 利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
- 利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
- 利用反射获取子类,父类,接口的信息
- C#利用反射在debug状态下获取调用代码所在文件及行信息
- Java利用反射获取object的属性和值代码示例
- 利用dot Net技术中反射及代码发送的动态退化或同步化接口封装
- 利用反射机制从数据库中获取数据,提高代码的可修改性
- 根据IP地址获取地理位置(利用腾讯提供接口)
- 利用Java反射根据属性名获取对象值和类型代码
- 利用AJAX实现鼠标悬浮获取值的代码
- 自定义泛型类,本质就是利用微软提供的集合和集合接口
- (转)利用libcurl获取新浪股票接口, ubuntu和openwrt实验成功(三)
- 利用js实现前台动态添加文本框,后台获取文本框内容(示例代码)
- NativeCode中通过JNI反射调用Java层的代码,以获取IMEI为例
- 开源免费天气预报接口API以及全国所有地区代码!!(国家气象局提供)
- java 利用反射机制,获取实体所有属性和方法,并对属性赋值
- 如何利用反射来获取类的常量
- android典型代码系列(十)------获取一个应用程序的权限信息(反射)
- 利用反射与接口访问数据库的区别
- C#利用反射获取对象属性值