Doxygen: как описать переменные-члены класса в php?

Я пытаюсь использовать doxygen для разбора php-кода в xml-выход. Doxygen не анализирует описание переменных-членов класса.

Вот мой пример файла php:

<?php class A { /** * Id on page. * * @var integer */ var $id = 1; } ?> 

Обратите внимание, что комментарий содержит краткое описание и тип переменной. Вот xml, который я получил из этого источника:

 <?xml version='1.0' encoding='UTF-8' standalone='no'?> <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.7.2"> <compounddef id="class_a" kind="class" prot="public"> <compoundname>A</compoundname> <sectiondef kind="public-attrib"> <memberdef kind="variable" id="class_a_1ae97941710d863131c700f069b109991e" prot="public" static="no" mutable="no"> <type></type> <definition>$id</definition> <argsstring></argsstring> <name>$id</name> <initializer> 1</initializer> <briefdescription> </briefdescription> <detaileddescription> </detaileddescription> <inbodydescription> </inbodydescription> <location file="C:/projects/version6-7/asprunner/PHP/source/classes/a.php" line="11" bodyfile="C:/projects/version6-7/asprunner/PHP/source/classes/a.php" bodystart="11" bodyend="-1"/> </memberdef> </sectiondef> <briefdescription> </briefdescription> <detaileddescription> </detaileddescription> <location file="C:/projects/version6-7/asprunner/PHP/source/classes/a.php" line="5" bodyfile="C:/projects/version6-7/asprunner/PHP/source/classes/a.php" bodystart="4" bodyend="12"/> <listofallmembers> <member refid="class_a_1ae97941710d863131c700f069b109991e" prot="public" virt="non-virtual"><scope>A</scope><name>$id</name></member> </listofallmembers> </compounddef> </doxygen> 

Ни описание, ни тип не были проанализированы. Как я могу это исправить?

    Я использую входной фильтр, чтобы вставлять шрифты из аннотации @var inline с объявлением переменной и удалять аннотацию @var, поскольку она имеет другое значение в Doxygen. Для получения дополнительной информации см. Ошибку # 626105 .

    Поскольку Doxygen использует C-подобный парсер, при запуске входного фильтра он может распознавать типы.

     <?php $source = file_get_contents($argv[1]); $regexp = '#\@var\s+([^\s]+)([^/]+)/\s+(var|public|protected|private)\s+(\$[^\s;=]+)#'; $replac = '${2} */ ${3} ${1} ${4}'; $source = preg_replace($regexp, $replac, $source); echo $source; 

    Это быстрый взлом , и, вероятно, есть ошибки, он просто работает для моего кода:

    Doxygen @var PHP

    Вы можете включить фильтр ввода с параметром INPUT_FILTER в вашем Doxyfile. Сохраните приведенный выше код в файл с именем php_var_filter.php и установите значение фильтра в «php php_var_filter.php».

    У меня была та же проблема, поэтому я создал простой входной фильтр, который превращает основной синтаксис

     /** * @var int */ public $id; 

    в

     /** * @var int $id */ public $id; 

    что в любом случае будет излишним. Таким образом, среда Eclipse IDE может использовать тот же док-блок, что и Doxygen.

    Вы можете загрузить входной фильтр отсюда:

    https://bitbucket.org/tamasimrei/misc-tools/src/master/doxygen/filter.php

    См. Руководство Doxygen о том, как использовать входной фильтр.

    Инструмент также избегает обратных косых черт в докблоках, поэтому вы можете использовать пространства имён.

    Кажется, это ошибка в Doxygen. У меня такая же проблема с документацией в HTML.

    В настоящее время работает:

     class A { var $id = 1; /**< Id on page. */ } 

    Но эти комментарии не распознаются IDE NetBeans как документация поля.

    Хотя это не прямой ответ на ваш вопрос: если вы свободны использовать правильный инструмент для работы, взгляните на DocBlox . Он также генерирует XML-документ для дальнейшего преобразования в HTML или любой другой формат отображения и отлично работает для PHP. Это не будет нарушать обычное использование докблока.

    В качестве примера выведите информацию о документации по API Zend Framework .

    Блок будет правильно связан, если вы опустите @var. Это не дает нигде объявить тип, который раздражает, но, по крайней мере, описание будет работать.

    Версия для испытаний: Doxygen 1.7.1

    Большое спасибо Горану за его фильтр кислорода! Несколько расширив ту же идею, чтобы правильно документировать параметры функции:

    Включить типы массивов объектов типа Zend в стиле Zend в документах doxygen:

     // Change the following: // /** @param VarType[] $pParamName Description **/ // function name(array $pParamName) { // Into: // /** @param array $pParamName Description **/ // function name(VarType[] $pParamName) { $regexp = '#\@param\s+([^\s]+)\[\]\s+(\$[^\s]+)\s+([^/]+)/\s+(public|protected|private)?\s+function\s+([^\s]+)\s*\(([^)]*)array\s+\2([^)]*)\)(\s+){#s'; $replac = '@param array ${2} ${3}/ ${4} function ${5} (${6} ${1}[] ${2}${7})${8}{'; $lSource = preg_replace($regexp, $replac, $lSource); 

    Включить типы int / float / double / string @param в документацию doxygen:

     // Change the following: // /** @param (int|float|double|string) $pParamName Description **/ // function name($pParamName) { // Into: // /** @param (int|float|double|string) $pParamName Description **/ // function name((int|float|double|string) $pParamName) { $regexp = '#\@param\s+(int|float|double|string)\s+(\$[^\s]+)\s+([^/]+)/\s+(public|protected|private)?\s+function\s+([^\(\s]+)\s*([^)]*)(\(|,)\s*\2([^)]*)\)(\s+){#s'; $replac = '@param ${1} ${2} ${3}/ ${4} function ${5}${6}${7}${1} ${2}${8})${9}{ '; //${6}${1} ${2}${7})${8}{'; $lSource = preg_replace($regexp, $replac, $lSource); 

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

    Для пользователей Windows без установленного php может быть полезно использовать скомпилированный исполняемый php_var_filter.php сценарий фильтра кислорода из ответа