反射API将无法单独做到这一点(或者根本不是一个类)。例如,使用此代码:
<?php
$bar = array(
/** I'm foo! */
'foo' => 1,
/** I'm bar! */
'bar' => 2,
);
Reflection API在这里没有用(没有类,没有函数)。你仍然可以得到它使用tokenizer:
$code = file_get_contents('input.php');
$tokens = token_get_all($code);
foreach ($tokens as $key => $token) {
if (is_array($token)) {
if ($token[0] == T_DOC_COMMENT) {
for ($i=$key+1; $i<count($tokens); $i++) {
if (is_array($tokens[$i]) && $tokens[$i][0] != T_WHITESPACE) {
echo $tokens[$i][2] . ' = '.$token[1].PHP_EOL;
break;
}
}
} /* T_DOC_COMMENT */
}
}
这将打印:
'foo' = /** I'm foo! */
'bar' = /** I'm bar! */
然而,请记住,这是一个非常小的例子完成。如果你想要解析一个完整的PHP文件(包括类,函数等),你会在 颠簸驾驶。
总之,这是可能的,但它涉及很多工作,而且很容易出错。我不会推荐它。有might be an actual PHP parser that exists,但我从来没有使用过,所以我不知道。
这些不是doccomments,但只是评论。此外,您的示例并未指定遇到这种情况的上下文,例如类,功能或仅仅是文件。 – Gordon 2011-04-11 14:13:36
你为什么要这样做?评论是针对人类的,以这种方式使用它们似乎违反直觉。 – 2011-04-11 14:16:01
@Adam指针:不是。评论可以用于很多事情(请参阅PHPDocumentor和PHPUnit)。而且,在Java中,它们实际上对编译器很有用(例如:@exception标签)。 – netcoder 2011-04-11 14:23:29