美文网首页
获取文档注释方法封装(thinkphp5.*)

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

作者: 安之烟波客 | 来源:发表于2019-10-14 01:34 被阅读0次

功能说明

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

用到的PHP系统方法

    1. ReflectionMethod
  • 2.ReflectionClass

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

<?php

namespace app\home\controller;



/**
 *  @desc 这个是类的注释
 *
 * @author jobsz
 */
class Index extends base {
     
    /**
     * @desc 方的注释--接口首页
     *
     * @param $module
     * @param $controller
     *
     * @return array|null
     */
    public function index(){
        echo '123';
    }
     /**
     * @desc 方法的注释--支付宝支付
     *
     * @param $module
     * @param $controller
     *
     * @return array|null
     */
public function ali() {

    }

}


代码示例

<?php

/*
 * 获取注释的方法 
 * 如果能获取到注释则放回注释,如果程序人员没有进行注释则返回控制器的类名和方法名称
 * 注释以“@desc ”打头
 */

/**
 * Description of DocumentTools
 *
 * @author jobsz
 */
class DocumentTools {

    //put your code here

    private $class = null; // 
    private $methodName = "";

    public function __construct(\think\Controller $class, $methodName) {
        $this->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类的初始化函数中进行,

<?php

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

namespace app\home\controller;

/**
 * Description of base
 *
 * @author jobsz
 */
class base extends \think\Controller {

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

}

相关文章

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

    功能说明 一般情况下,做系统后台管理的时候需要记录每一个管理员用户的操作记录,如果在每个控制器的每个方法中都手动去...

  • 良好的编程风格

    ⭕️ 正确的注释和注释风格 → 使用文档注释来注释整个类或整个方法。 → 如果注释方法中的某一个步骤,使用...

  • Android Studio 规范与技巧

    1.方法注释文档 添加方法注释模版快捷键(Preferences-Keymap-Fix doc comment),...

  • 2018-09-20 Java基础语法

    2018-09-20 Java基础语法 [TOC] 注释 单行注释 多行注释 文档注释 这种方法注释的内容会被解释...

  • C#语法基础

    1.注释符号文档注释:///内容如下/// /// 这里写出方法的作用/// /// ///

  • 获取url参数的两种方式

    获取URL参数的方法封装 正则法获取 数组法

  • 2020-11-04

    本地存储 、获取、移除、方法的封装

  • swift的文档注释一览

    多行注释文档 方法/函数的注释 源信息注释 算法注释关键字 标签注释关键字 markdown注释 还可以插入图片

  • Python方法、参数和调用

    函数 调用函数的方式 函数文档注释函数注释.png 函数参数传递 return 给方法添加参数注释image.pn...

  • Java基础之单行、多行、文档注释

    单行 //我是单行注释 多行 /* 我是多行注释 */ 文档注释 /** 我是文档注释 */ 文档注释和单行、多行...

网友评论

      本文标题:获取文档注释方法封装(thinkphp5.*)

      本文链接:https://www.haomeiwen.com/subject/yyllmctx.html