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

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

 

你可能感兴趣的:(ThinkPHP 3.2 中获取所有函数方法名,以及注释,完整可运行)