Как читать блоки комментариев в PHP? - PullRequest
9 голосов
/ 02 апреля 2009

Я делаю какую-то самодельную автоматизированную документацию, так как у меня есть кодовая база, которая не очень стандартна в своем макете, и мне было интересно, как лучше всего было бы прочитать файл PHP и захватить содержимое блока комментариев , Единственный способ, которым я могу подумать - это открыть файл и прочитать его построчно, но подумал, что, возможно, была какая-то встроенная магия, которая могла бы анализировать документ для меня, подобно функциям Reflection.

Основная схема каждого файла выглядит следующим образом:

<?php // $Id$
/**
 * Here is this script's documentation, with information in pseudo-javadoc
 * type tags and whatnot.
 *
 * @attr    something    some information about something
 * @attr    etc          etc etc
 */
 // rest of the code goes here.

Важно отметить, что в этих файлах не определены функции или классы. Комментарии относятся к сценарию в целом.

Ответы [ 2 ]

16 голосов
/ 02 апреля 2009

Выезд Токенайзер .

Чтобы получить все комментарии в файле с именем test.php, вы должны сделать:

$tokens = token_get_all(file_get_contents("test.php"));
$comments = array();
foreach($tokens as $token) {
    if($token[0] == T_COMMENT || $token[0] == T_DOC_COMMENT) {
        $comments[] = $token[1];
    }
}
print_r($comments);
1 голос
/ 02 апреля 2009

Посмотрите на Reflection API , который поставляется с PHP5, более конкретно getDocComment():

PHP 5 поставляется с полным отражением API, который добавляет возможность реверс-инженерные классы, интерфейсы, функции и методы, а также расширения. Кроме того, API отражения также предлагает способы получение комментариев к документам для функций, классы и методы.

Кроме того, в зависимости от размера вашей кодовой базы, вы можете работать меньше, изменив свои комментарии так, чтобы они соответствовали синтаксису phpDocumentor , который уже кажется довольно близким.

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