Home > Backend Development > PHP Tutorial > ThinkPHP 3.2 中获取所有函数方法名,以及诠释,完整可运行

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Release: 2016-06-13 12:13:59
Original
994 people have browsed it

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="brush:php;toolbar:false">';        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([email&#160;protected](.*?)\n/',$tmp,$tmp);        $tmp   = trim($tmp[1][0]);        $tmp   = $tmp !='' ? $tmp:'无';        return $tmp;    }}
Copy after login

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

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

 

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

 

参考:

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

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

 

Related labels:
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Issues
Controller does not exist: app\controller\Test
From 1970-01-01 08:00:00
0
0
0
Controller touch?
From 1970-01-01 08:00:00
0
0
0
AngularJS via controller A to controller B
From 1970-01-01 08:00:00
0
0
0
Imitate $this->show() in TP5 Controller
From 1970-01-01 08:00:00
0
0
0
ControllerClass 'think\Controller' not found in
From 1970-01-01 08:00:00
0
0
0
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template