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;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值