PHP反射;提取非块注释



我最近熟悉了Reflection,并一直在尝试它,尤其是getDocComment(),但它似乎只支持/** */注释块。

/** foobar */
class MyClass{}
$refl = new ReflectionClass('MyClass');
// produces /** foobar */
echo $refl->getDocComment();

-Versus-

# foobar
class MyClass{}
$refl = new ReflectionClass('MyClass');
// produces nothing
echo $refl->getDocComment();

难道不可能在不诉诸任何file_get_contents(__FILE__)废话的情况下捕捉到这一点吗?


根据dader51的回答,我想我最好的方法是这样的:

// random comment
#[annotation]
/**
 * another comment with a # hash
 */
#[another annotation]
$annotations
    = array_filter(token_get_all(file_get_contents(__FILE__)), function(&$token){
    return (($token[0] == T_COMMENT) && ($token = strstr($token[1], '#')));
});
print_r($annotations);

输出:

Array
(
    [4] => #[annotation]
    [8] => #[another annotation]
)

DocComments通过说明如何使用类来区分自己,而常规注释可以帮助开发人员阅读代码。这也是为什么该方法没有被称为getComment()的原因。

当然,这都是文本解析,有人刚刚在docComments中选择了始终是这些多行注释,但显然已经做出了选择,阅读常规注释不属于反射类别。

几天前我只想做一个你,下面是我的诀窍。您只需使用php内部标记器(http://www.php.net/manual/en/function.token-get-all.php),然后遍历返回的数组只选择注释,这里有一个示例代码:

$a = token_get_all(file_get_contents('path/to/your/file.php'));
print_r($a); // display an array of all tokens found in the file file.php

以下是php识别的所有令牌的列表:http://www.php.net/manual/en/tokens.php

通过这种方法你会得到的评论包括(来自php.net网站):

T_COMMENT://或#,和/**/在PHP 5 中

希望它能有所帮助!

AFAIK,注释要成为文档,需要以/**开头,甚至不能以标准的多行注释开头。

顾名思义,文档注释是文档注释,而不是标准注释,否则,当你为doxygen等应用程序获取注释时,它会试图记录任何来自测试/调试等的注释代码,这些代码通常会被落在后面,对API用户来说并不重要。

正如您在第一个用户贡献的注释中所读到的:

文档注释(T_DOC_COMMENT)必须以/**开头——这是两个星号,而不是一个。注释一直持续到第一个*/。普通的多行注释/*...*/T_COMMENT)不算作文档注释。

因此,该方法只给出了CCD_ 11块。

我不知道php有任何其他方法可以像使用file_get_contents一样获得其他注释,并使用例如regex 来过滤注释

相关内容

  • 没有找到相关文章

最新更新