使用反射从数组元素中检索DocComment


Retrieve DocComment from array element using Reflection?

给定如下数组:

array(
     /** I'm foo! */
     'foo' => 1,
     /** I'm bar! */
     'bar' => 2,
);

是否可以检索数组元素的DocComments ?据我所知,Reflection API并没有为此提供机制。如果这是可能的,我猜这将是一个相当"创造性"的解决方案。

反射API将无法自己完成此操作(或者如果它不是一个类则根本不能)。例如,使用以下代码:

<?php
$bar = array(
     /** I'm foo! */
     'foo' => 1,
     /** I'm bar! */
     'bar' => 2,
);

反射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文件(包含类、函数等),那么将是一个很好的选择一路颠簸 .

总之,这是可能的,但它涉及很多工作,而且很容易出错。我不推荐。可能存在一个实际的PHP解析器,但我从未使用过,所以我无法判断。