PHP反射;提取非块注释

PHP反射;提取非块注释,php,reflection,comments,phpdoc,Php,Reflection,Comments,Phpdoc,我最近熟悉了反射,并一直在尝试它,特别是getDocComment(),但是它似乎只支持/***/注释块 /** foobar */ class MyClass{} $refl = new ReflectionClass('MyClass'); // produces /** foobar */ echo $refl->getDocComment(); -对- # foobar class MyClass{} $refl = new ReflectionClass('MyClass

我最近熟悉了
反射
,并一直在尝试它,特别是
getDocComment()
,但是它似乎只支持
/***/
注释块

/** foobar */
class MyClass{}

$refl = new ReflectionClass('MyClass');

// produces /** foobar */
echo $refl->getDocComment();
-对-

# foobar
class MyClass{}

$refl = new ReflectionClass('MyClass');

// produces nothing
echo $refl->getDocComment();
如果不使用任何类型的
file\u get\u内容(\uu\u file\uuu)
废话,就不可能捕捉到这一点吗


根据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]

)

AFAIK,一条评论要成为文档,必须以/**开头,即使是标准的多行评论也不行。

AFAIK,一条评论要成为文档,必须以/**开头,即使是标准的多行评论也不行。

正如您在第一条用户投稿的注释中所读到的:

文档注释(
T\u doc\u comment
)必须以
/**
开头-这是两个星号,而不是一个。注释将持续到第一个
*/
。正常的多行注释
/*…*/
T_comment
)不算作文档注释

因此,此方法仅给出
/***/

我不知道使用php获取其他注释的任何其他方法,如使用
file\u get\u contents
并使用
regex
等过滤注释,正如您在第一个用户投稿说明中所看到的:

文档注释(
T\u doc\u comment
)必须以
/**
开头-这是两个星号,而不是一个。注释将持续到第一个
*/
。正常的多行注释
/*…*/
T_comment
)不算作文档注释

因此,此方法仅给出
/***/


我不知道php还有什么其他方法可以像使用
file\u get\u contents
那样获取其他注释,并使用
regex

DocComments等工具过滤注释。与可以帮助开发人员阅读代码的常规注释相比,DocComments通过讲述类的使用方式来区分它们自己。这也是为什么不调用方法
getComment()


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

docComments通过讲述如何使用类来区分自己,与可以帮助开发人员阅读代码的常规注释相比。这也是为什么不调用方法
getComment()


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

顾名思义,文档注释是文档注释,而不是标准注释,否则,当您获取应用程序(如doxygen)的注释时,它将尝试记录测试/调试等过程中的任何注释代码,这些代码通常会被遗忘,对API用户来说并不重要。

顾名思义,文档注释是一个文档注释,而不是标准注释,否则,当您获取应用程序(如doxygen)的注释时,它将尝试记录测试/调试等过程中的任何注释代码,这些注释代码通常会被遗忘,对API用户来说并不重要。

几天前,我正试图为您做一些注释,下面是我的技巧。您只需使用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识别的所有令牌的列表:

您将通过此方法获得的评论包括(来自php.net网站):

PHP5中的注释://或#和/**/


希望有帮助

几天前,我正试着给你做一个小动作,这是我的窍门。您只需使用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识别的所有令牌的列表:

您将通过此方法获得的评论包括(来自php.net网站):

PHP5中的注释://或#和/**/


希望有帮助

谢谢C.Evenhuis;嗯,那太不幸了。我很好奇,因为在我的阅读中,我听说PHP XP框架支持它,但经过挖掘,我了解到他们已经实现了自己的反射类,这可能会增加对它的支持。谢谢C.Evenhuis;嗯,那太不幸了。我很好奇,因为在我的阅读中,我听说PHP XP框架支持它,但经过挖掘,我了解到他们已经实现了自己的反射类,这可能会增加对它的支持。感谢韦塞尔·克兰伯格;该死。我在别处看到过这一点,我只是不知道是否有未提及的对非文档块注释的支持。当注释涉及扩展方法时,PHP应该合并用户对类方法的注释,因为
getDocComment
会出现3次。我理解它的来龙去脉,但仍然如此;该死。我在别处看到过这一点,我只是不知道是否有未提及的对非文档块注释的支持。当注释涉及扩展方法时,PHP应该合并用户对类方法的注释,因为
getDocComment
会出现3次。我理解它的来龙去脉,但仍然如此;这很好,除了它使用凌乱的
file\u get\u内容(\uu\u file\uu)
方法进行自我反思,并且很难将给定的注释与定义(类、函数等)相关联。是的,我知道对于file\u get\u内容问题,而且为此使用标记器将把您带到解析领域,这实际上是整个国家…这让我很开心!谢谢