Есть ли хороший (автономный) класс парсера PHPDoc или функция в PHP?

Я ищу какой-нибудь метод преобразования PHP Docblock (который используется для создания документации с помощью таких инструментов, как Doxygen) в структуру, которую я могу проверить в PHP.

Например, я хочу разобрать

/**
 * Multiply two values
 * @CHECKME
 *
 * @author someone
 * @created eons ago
 *
 * @param integer $x
 * @param integer $x
 *
 * @return integer
 */
function multiply($x, $y)
{
    return $x * $y;
}

во что-то похожее на:

array(
     'author'  => 'someone'
    ,'created' => 'eons ago'
    ,'param'   => array(
                      'integer $x'
                     ,'integer $y'
                  )
    ,'_flags'  => array(
                     '@CHECKME'
                  )
);

Я явно не могу использовать PEAR или любую подобную библиотеку, она должна быть относительно автономный. Любое данное решение, которое лучше, чем использование набора регулярных выражений после удаления структуры комментариев, было бы потрясающим.


person Kris    schedule 09.06.2010    source источник
comment
возможный дубликат Есть ли какие-либо инструменты парсера php docblock?   -  person Gordon    schedule 31.01.2011
comment
@Гордон. Не дубликат, я не стремился просто создать кучу статических файлов документации, а обеспечить улучшенное отражение во время выполнения. Создание документации является дополнительным преимуществом.   -  person Kris    schedule 02.05.2012
comment
возможный дубликат Синтаксический анализ комментариев PHP Doc в структуру данных   -  person Gordon    schedule 02.05.2012
comment
и еще парочка в разделе «Связанные» справа.   -  person Gordon    schedule 02.05.2012
comment
@ Гордон, посмотри еще раз, это новый вопрос. Как и те, что справа, которые на самом деле похожи, которые я только что проверил. Я действительно использовал поиск перед публикацией.   -  person Kris    schedule 02.05.2012
comment
Я не говорил, что вы не искали. Кроме того, даже если они новее, у них есть ответы, на которые вы, возможно, захотите взглянуть. Тем не менее, я до сих пор не понимаю, почему мой ответ в первом дупликате (который является более старым) все равно не отвечает на ваш вопрос, поскольку он рекомендует использовать API-интерфейс Reflection, который может отражать Docblocks во время выполнения, о чем вы просите, не так ли? Это?   -  person Gordon    schedule 02.05.2012
comment
API отражения дает мне весь докблок только в виде строки, мне нужно было перфокартировать определенные детали из этой строки. API Reflection не имеет ничего (по крайней мере, задокументированного), что может это сделать. Что, я считаю, четко указано в вопросе.   -  person Kris    schedule 02.05.2012
comment
так что-то вроде code.google.com/p/addendum?   -  person Gordon    schedule 02.05.2012
comment
давайте продолжим обсуждение в чате   -  person Kris    schedule 03.05.2012
comment
Привет Чувак. Вы нашли способ разобрать эти докблоки?   -  person Krzysztof Trzos    schedule 19.09.2013
comment
@KrzysztofTrzos: да, но, к сожалению, путем разбора вручную с помощью нескольких регулярных выражений.   -  person Kris    schedule 19.09.2013
comment
Можете как-нибудь поделиться? Я ищу решение этой проблемы более нескольких часов...   -  person Krzysztof Trzos    schedule 19.09.2013
comment
@KrzysztofTrzos: Извините, в настоящее время я не могу по закону.   -  person Kris    schedule 19.09.2013


Ответы (4)


Интересно, нельзя ли просто использовать классы phpdocumentor. Они уже анализируют данные. Я подозреваю, что вы могли бы написать свой собственный промежуточный синтаксический анализатор для обработки файла, а затем обрабатывать необработанные объекты любым удобным для вас способом.

person allnightgrocery    schedule 09.06.2010
comment
Я не мог получить доступ к какому-либо источнику phpDocumentor за последние пару часов, но мои предположения, основанные на веб-сайте/часто задаваемых вопросах, заключаются в том, что это код php4, который зависит от PEAR (для его установки требуется PEAR). Судя по всему, использовать его будет не меньше работы, чем написать его самому. (могу ошибаться, не могу проверить банкомат) - person Kris; 10.06.2010
comment
Классы доступны в виде файлов *.inc в каталоге phpDocumentor после загрузки. Я не уверен, видели вы это или нет. - person allnightgrocery; 10.06.2010
comment
Да, я это сделал, но к тому времени, когда я ознакомился с mysql со старомодным стилем и структурой, я мог написать свою собственную реализацию, которая соответствует моей фактической спецификации, и к тому времени мне все равно придется переписывать код php4. Автономный! = полный проект - person Kris; 10.06.2010

Посмотрите на использование класса Reflection [1] в качестве отправной точки, особенно на его метод getDocComment() [2]. Кроме того, сообщение в блоге Мэтью о его набеге на его использование [3] может дать дополнительную информацию.

[1] -- http://www.php.net/manual/en/class.reflectionclass.php

[2] -- http://www.php.net/manual/en/reflectionclass.getdoccomment.php

[3] -- http://mwop.net/blog/125-PHP-5s-Reflection-API

person ashnazg    schedule 23.02.2012
comment
Я всегда получал документ таким образом, я искал какой-то способ разобрать из него аннотации, которые бы соответствовали моей существующей кодовой базе. - person Kris; 24.02.2012
comment
К сожалению, это требует, чтобы вы действительно включили файл, в котором содержатся докблоки. - person Szczepan Hołyszewski; 02.09.2015

PHPDocumentor — это автономный анализатор блоков документов.

person powtac    schedule 09.06.2010
comment
Я только что скачал zip и посмотрел исходный код, но код phpDocumentors ужасен для моего варианта использования. Потребуются дни, чтобы переделать это вместо часов, чтобы свернуть мой собственный. Мне нужен один или два класса, а не смешанный проект с зависимостями повсюду и, конечно же, без кода php4. Возможно, я смогу что-то почерпнуть из него, если прогоню что-то через него в сеансе xdebug, но, увидев код, я все еще думаю, что его нельзя использовать. - person Kris; 10.06.2010

Я написал исполняемую утилиту документирования PHP, содержащую класс парсера PHPDoc (Документор). Я думаю, что это сделает то, что вы хотите, если вы хотите взглянуть. Он также доступен на github, если у вас есть какие-либо улучшения или исправления ошибок.

person Murray Picton    schedule 23.02.2012
comment
Сайт (и, кажется, проект) недоступен. Давая это -1. - person Andrii S.; 27.01.2017