获取文档注释方法封装(thinkphp5.*)

功能说明

一般情况下,做系统后台管理的时候需要记录每一个管理员用户的操作记录,如果在每个控制器的每个方法中都手动去执行一个写日志的方法的话,似乎有些麻烦,所以心血来潮写了这样一个类,与伙计们共勉,有更好的实现方法欢迎交流。

用到的PHP系统方法

    1. ReflectionMethod
  • 2.ReflectionClass

规则:
注释规则以“@desc开头”
如:


代码示例

class = $class;
        $this->methodName = $methodName;
    }

    public function getDocument() {
        $returnData = [];
        $classRef = new ReflectionClass($this->class);
        $classDocument = $classRef->getDocComment();
        // 获取方法的名称
        $class_desc = [];
        preg_match_all('/@desc(.*?)\n/', $classDocument, $class_desc);
        $c_desc = !empty($class_desc[1][0]) ? trim($class_desc[1][0]) : "";
        $returnData[] = $c_desc ?  $c_desc : basename(get_class($this->class)) ;
        if (!method_exists($this->class, $this->methodName)) {
            $returnData[] = $this->methodName;
        }

        $methodDocument = new ReflectionMethod($this->class, $this->methodName);
        $method_desc = [];
;
        preg_match_all('/@desc(.*?)\n/', $methodDocument, $method_desc);
        if ($method_desc) {

            $m_desc = !empty($method_desc[1][0]) ? trim($method_desc[1][0]) : $this->methodName;
           
        } else {
            $m_desc = $this->methodName;
        }
         $returnData[] = $m_desc;
         return implode("-", $returnData);
    }

}

使用方法:

首先创建一个base类让其继承与think\Controller类,然后让其他实际实现功能的控制器继承与base类,所有的日志写入记录都在base类的初始化函数中进行,

action();
        
       $class_name = get_called_class();
       $func = new \DocumentTools($this,$action);
       halt ($func->getDocument()); // 获取到的注释文档
    }

}

你可能感兴趣的:(获取文档注释方法封装(thinkphp5.*))