V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
haython
V2EX  ›  PHP

如何获取 php 文档注释的某个字段?

  •  
  •   haython · 2016-04-11 20:41:47 +08:00 · 4240 次点击
    这是一个创建于 3185 天前的主题,其中的信息可能已经有所发展或是发生改变。
    @author  Author Name [<[email protected]>]      代码编写人(负责人)
    @version xx.xx                                 当前版本号
    @param   datatype $v_name[,...] description    函数相关联的参数,含有,...表示可传入不定数量的其他参数
    @return  datatype description                  函数或方法的返回值类型
    @var     datatype                              在类中说明类变量(属性)的类型
    @example [path|url] description                举一个例子,以阐释使用方法
    @todo    description                           待完成的工作信息或待解决的问题信息
    

    现在已经通过反射获取到方法的文档注释,要怎么获取文档注释的特定内容,比如我现在要获取所有 @param 的,怎么获取?

    9 条回复    2016-04-21 13:05:16 +08:00
    feiyuanqiu
        1
    feiyuanqiu  
       2016-04-11 20:59:57 +08:00   ❤️ 1
    我用的是 phpdocumentor 的 reflection-docblock 包
    如果你没法用 composer 的话可以看看它的实现参考一下
    wesley
        3
    wesley  
       2016-04-11 21:22:28 +08:00   ❤️ 1
    反射 + 正则
    vus520
        4
    vus520  
       2016-04-11 21:51:19 +08:00   ❤️ 1
    还有个办法,不需要依赖,自己 parse

    $class = new \ReflectionClass($class);
    $methods = $class->getMethods();

    获取每个 method 的注释,再正则取
    $method->getDocComment();
    zonghua
        5
    zonghua  
       2016-04-12 07:41:12 +08:00 via iPhone   ❤️ 1
    这样就能创造 PHP 的装饰器 yu   fu
    Kokororin
        6
    Kokororin  
       2016-04-12 08:50:09 +08:00   ❤️ 1
    liuyao729
        7
    liuyao729  
       2016-04-12 10:55:32 +08:00   ❤️ 1
    zeevin
        8
    zeevin  
       2016-04-21 13:04:04 +08:00
    function getDocComment($str, $tag = '')
    {
    if (empty($tag))
    {
    return $str;
    }

    $matches = array();
    preg_match("/".$tag."(.*)(\\r\\n|\\r|\\n)/U", $str, $matches);

    if (isset($matches[1]))
    {
    return trim($matches[1]);
    }

    return '';
    }

    $falg = getDocComment($doc, '@flag');
    zeevin
        9
    zeevin  
       2016-04-21 13:05:16 +08:00
    以上方法和 @vus520 方法联合使用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   988 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:46 · PVG 04:46 · LAX 12:46 · JFK 15:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.