Получить DocComment из элемента массива, используя Reflection? - PullRequest
1 голос
/ 11 апреля 2011

Имеется такой массив:

array(
     /** I'm foo! */
     'foo' => 1,

     /** I'm bar! */
     'bar' => 2,
);

Возможно ли получить DocComments для элементов массива?Насколько я знаю, API Reflection не предоставляет механизма для этого.Если это возможно, я предполагаю, что это должно быть довольно «креативное» решение.

1 Ответ

1 голос
/ 11 апреля 2011

Reflection API не сможет сделать это сам по себе (или вообще не сможет, если это не класс).Например, с этим кодом:

<?php

$bar = array(
     /** I'm foo! */
     'foo' => 1,

     /** I'm bar! */
     'bar' => 2,
);

API Reflection здесь бесполезен (без классов, без функций).Вы по-прежнему можете получить его, используя токенизатор :

$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, который существует , но я никогда не использовал его, поэтому не могу сказать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...