Intereting Posts
Следует ли проверять уникальные поля на уровне базы данных? Google App Engine PHP внезапно прекратил работу приложений локально Создание экземпляра класса из строки обычно не работает в php Uploadify: определение максимальной ширины и высоты изображения PHP Unset Session Variable Как получить формат «yyyy-MM-ddTHH: mm: ss.fffZ» в php? Стоимость масштабирования Rails и стоимость масштабирования PHP и Python Laravel: проверять целое поле, которое должно быть больше, чем другое Если имена верхних регистров преобразуются в правильное дело, обрабатываются «О'Хара», «Макдональд», «Ван дер Слоут» и т. Д. Вход пользователя с одним запросом и солью пользователя для каждого пользователя Что случилось с PDO в другом классе? Получить текущее время веб-сервера Плагин с открытым исходным кодом для обмена ссылками, такими как Addthis? Возврат URL-адреса jms wordpress ajax не обновляет базу данных

Существуют ли инструменты парсера PHP DocBlock?

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

В идеале я хотел бы увидеть что-то, в которое я мог бы передать кучу файлов, и вернуть все файлы, классы, свойства и методы вместе со своими метаданными, чтобы я мог создавать некоторые простые шаблоны, основанные на данные.

Существуют ли какие-либо проекты парсера DocBlock, которые помогут мне в этой задаче, или я застрял в создании этого колеса?

    Вы можете легко сделать это с помощью API Reflection:

    /** * This is an Example class */ class Example { /** * This is an example function */ public function fn() { // void } } $reflector = new ReflectionClass('Example'); // to get the Class DocBlock echo $reflector->getDocComment() // to get the Method DocBlock $reflector->getMethod('fn')->getDocComment(); 

    См. Этот учебник: http://www.phpriot.com/articles/reflection-api

    Существует также пакет PEAR, который может анализировать DocBlocks.

    В случае, если кто-то нуждается в регулярном выражении ( xdazz предложил попробовать это, и student310 прокомментировал, что он работает для его / ее потребностей)

     if (preg_match_all('/@(\w+)\s+(.*)\r?\n/m', $str, $matches)){ $result = array_combine($matches[1], $matches[2]); } 

    Пример ( демонстрация ) :

     <?php $str =' /** * @param integer $int An integer * @return boolean */ '; if (preg_match_all('/@(\w+)\s+(.*)\r?\n/m', $str, $matches)){ $result = array_combine($matches[1], $matches[2]); } var_dump($result); 

    Просто обновить ответы. Вы также можете проверить проект phpDocumentor2 . Я думаю, что это парсер PHP DocBlock можно легко извлечь как автономное решение.

    Как отметил фургас, я много лет использую phpDocumentor как самостоятельный проект, и он отлично работает.

     <?php $class = new ReflectionClass('MyClass'); $phpdoc = new \phpDocumentor\Reflection\DocBlock($class); var_dump($phpdoc->getShortDescription()); var_dump($phpdoc->getLongDescription()->getContents()); var_dump($phpdoc->getTags()); var_dump($phpdoc->hasTag('author')); var_dump($phpdoc->hasTag('copyright')); 

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

    Наши семантические проекты PHP Front End предоставляет полный парсер PHP 4/5 (по состоянию на 2016 год входит PHP 7). Он анализирует исходный код PHP, строит абстрактные деревья синтаксиса, штамповки каждого узла с точной информацией о местоположении и делает их доступными для дальнейшего использования. Одно общее, что он может сделать, это распечатать любое поддерево обратно в качестве исходного текста.

    В вашем случае вы хотите сканировать по деревьям, найти классы / методы / свойства (как узлы дерева) и распечатать исходный текст вместе с информацией о местоположении. Я думаю, это обеспечит именно то, что вы хотите.