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

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

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

4239 次点击
所在节点    PHP
9 条回复
feiyuanqiu
2016-04-11 20:59:57 +08:00
我用的是 phpdocumentor 的 reflection-docblock 包
如果你没法用 composer 的话可以看看它的实现参考一下
feiyuanqiu
2016-04-11 21:02:04 +08:00
wesley
2016-04-11 21:22:28 +08:00
反射 + 正则
vus520
2016-04-11 21:51:19 +08:00
还有个办法,不需要依赖,自己 parse

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

获取每个 method 的注释,再正则取
$method->getDocComment();
zonghua
2016-04-12 07:41:12 +08:00
这样就能创造 PHP 的装饰器 yu   fu
Kokororin
2016-04-12 08:50:09 +08:00
liuyao729
2016-04-12 10:55:32 +08:00
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
2016-04-21 13:05:16 +08:00
以上方法和 @vus520 方法联合使用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/270285

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX