ThinkPHP 3.2 中获取所有函数方法名,以及注释,完整可运行
<?php 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 '<pre>' ; 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 (<span style= "color: #6a8759;" > '_before_index' <span style= "color: #cc7832;" >,<span style= "color: #6a8759;" > '_after_index' <span style= "color: #cc7832;" >,</span></span></span></span> '_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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥