Heim  >  Artikel  >  Backend-Entwicklung  >  ThinkPHP 3.2 中获取所有函数方法名,以及注释,完整可运行

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

PHP中文网
PHP中文网Original
2017-03-30 16:31:561804Durchsuche

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

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、www.thinkphp.cn/code/718.html
2、www.thinkphp.cn/topic/10357.html

以上就介绍了ThinkPHP 3.2 中获取所有函数方法名,以及注释,完整可运行,包括了方面的内容,更多相关内容请关注PHP中文网(www.php.cn)!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn