> 백엔드 개발 > PHP 튜토리얼 > ThinkPHP 3.2 中获取所有函数方法名,以及诠释,完整可运行

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
풀어 주다: 2016-06-13 12:13:59
원래의
986명이 탐색했습니다.

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;    }}
로그인 후 복사

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

 <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

 

관련 라벨:
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿