• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 4年前 (2022-01-24) 21次浏览 已收录 0个评论

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

<?phpnamespace 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 class="prettyprint linenums">';        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<div>)本文来源gaodai.ma#com搞#代!码网_</div><strong>搞代gaodaima码</strong> 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([email protected](.*?)\n/',$tmp,$tmp);        $tmp   = trim($tmp[1][0]);        $tmp   = $tmp !='' ? $tmp:'无';        return $tmp;    }}

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

 <span style="color: #008000">/*</span><span style="color: #008000">*     * @cc index主页面     </span><span style="color: #008000">*/</span>

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

参考:

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

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


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:ThinkPHP 3.2 中获取所有函数方法名,以及诠释,完整可运行
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址