php 获取所有的函数,ThinkPHP 3.2 中获取所有函数方法名,以及诠释,完整可运行...

ThinkPHP 3.2 中获取所有函数方法名,以及注释,完整可运行

namespace Home\Controller;

use Common\Controller\BaseController;

class AuthController extends BaseController{

/**

* @cc index主页面

*/

public function index(){

$modules = array('Home'); //模块名称

$i = 0;

foreach ($modules as $module) {

$all_controller = $this->getController($module);

foreach ($all_controller as $controller) {

$controller_name = $controller;

$all_action = $this->getAction($module, $controller_name);

foreach ($all_action as $action) {

$data[$i] = array(

'name' =>$module.'/'. $controller . '/' . $action,

'status' => 1,

'desc'=>$this->get_cc_desc($module,$controller,$action)

);

$i++;

}

}

}

echo '

';

print_r($data);

}

/**

* @cc 获取所有控制器名称

*

* @param $module

*

* @return array|null

*/

protected function getController($module){

if(empty($module)) return null;

$module_path = APP_PATH . '/' . $module . '/Controller/'; //控制器路径

if(!is_dir($module_path)) return null;

$module_path .= '/*.class.php';

$ary_files = glob($module_path);

foreach ($ary_files as $file) {

if (is_dir($file)) {

continue;

}else {

$files[] = basename($file, C('DEFAULT_C_LAYER').'.class.php');

}

}

return $files;

}

/**

* @cc 获取所有方法名称

*

* @param $module

* @param $controller

*

* @return array|null

*/

protected function getAction($module, $controller){

if(empty($controller)) return null;

$content = file_get_contents(APP_PATH . '/'.$module.'/Controller/'.$controller.'Controller.class.php');

preg_match_all("/.*?public.*?function(.*?)\(.*?\)/i", $content, $matches);

$functions = $matches[1];

//排除部分方法

$inherents_functions = array('_before_index','_after_index','_initialize','__construct','getActionName','isAjax','display','show','fetch','buildHtml','assign','__set','get','__get','__isset','__call','error','success','ajaxReturn','redirect','__destruct','_empty');

foreach ($functions as $func){

$func = trim($func);

if(!in_array($func, $inherents_functions)){

if (strlen($func)>0) $customer_functions[] = $func;

}

}

return $customer_functions;

}

/**

* @cc 获取函数的注释

*

* @param $module Home

* @param $controller Auth

* @param $action index

*

* @return string 注释

*

*/

protected function get_cc_desc($module,$controller,$action){

$desc=$module.'\Controller\\'.$controller.'Controller';

$func = new \ReflectionMethod(new $desc(),$action);

$tmp = $func->getDocComment();

$flag = preg_match_all('/@cc(.*?)\n/',$tmp,$tmp);

$tmp = trim($tmp[1][0]);

$tmp = $tmp !='' ? $tmp:'无';

return $tmp;

}

}

其中注释必须采用固定格式,

/**

* @cc index主页面*/

适用于ThinkPHP 3.2.2 ,适合用auth 认证时,直接提取所有的控制器及方法名,可以获取注释。非常方便。

参考:

1、http://www.thinkphp.cn/code/718.html

2、http://www.thinkphp.cn/topic/10357.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值