Я сталкиваюсь с какой-то странной проблемой, пока я пытаюсь документировать мой проект. У меня есть следующий код:
//! Set default ::$action for called controller. If no action is called, default (index) will be set. $action = isset($_GET[ 'action']) ? $_GET[ 'action'] : 'index'; if ($action) { echo 'something 1'; }else{ echo 'something 2'; } //! Set default ::$action2 for called controller. If no action is called, default (index) will be set. $action2 = isset($_GET[ 'action']) ? $_GET[ 'action'] : 'index'; //! Set default ::$action3 for called controller. If no action is called, default (index) will be set. $action3 = isset($_GET[ 'action']) ? $_GET[ 'action'] : 'index';
Doxygen генерирует следующее:
Как вы можете видеть, $ action2 отсутствует. Я проверяю один из моих других файлов и вижу ту же проблему. Следующая вещь после утверждения if
никогда не документирована, но после нее документируется. Если я удалю оператор if
из приведенного выше примера, я получаю документацию для всех 4 переменных – $page
, $action
, action3
и action3
.
Я трачу огромное время на то, чтобы понять, что именно не так, но не повезло, поэтому каждое предложение приветствуется.
Система: Windows XP x64 с Doxygen 1.7.4. (Я использую Doxygen GUI)
UPDATE Кроме того, когда у меня есть что-то подобное в моем коде (обратите внимание на недостающее else
для оператора if
). Когда я добавляю }else{}
это работает. Следующие $variables
снова не документируются, но это обновление было связано с if/else
.
Doxygen преобразует его в это
Просмотрите этот http://www.stack.nl/~dimitri/doxygen/autolink.html, который объясняет странность, которую вы видите с первым фрагментом кода.
К сожалению, Doxygen не так хорошо документирует процедурный PHP-код. И после проверки всей моей собственной документации, созданной с помощью doxygen, я не могу найти никаких документированных переменных для любой функции или метода, если они не определены свойства класса.
В противном случае, я думаю, что самый большой дружественный проект PHP doxygen там есть Drupal, их рекомендации были написаны, чтобы использовать систему обработки комментариев Doxygen в полной мере. http://drupal.org/node/1354
Обратите внимание, что если это не тот ответ, который вы ищете, или я полностью не в сети, немедленно сообщите мне, чтобы я мог удалить этот ответ.
Я считаю, что это ошибка в doxygen при анализе php. С 2008 года была аналогичная проблема, над которой работала, но никогда не разрешалась – https://bugzilla.gnome.org/show_bug.cgi?id=528815
Я готов поспорить, что ваша проблема связана.
У меня есть несколько предложений:
1) Возможно, я наткнулся на обходной путь. Добавление точки с запятой после того, как блок, похоже, ведет себя корректно.
if ($action) { echo 'something 1'; }else{ echo 'something 2'; };
Тем не менее, я не знаю, приведет ли это к другим проблемам при анализе doxygen.
2) Я использую doxygen для моих проектов на C ++, но я использую phpdoc для своих проектов php, потому что у меня были лучшие результаты с ним. Вы можете подумать о том, чтобы сделать то же самое, если вы не привязаны к doxygen по политическим или практическим причинам.
Только PHP: Doxygen требует, чтобы все инструкции PHP (т.е. код) были обернуты в функции / методы, иначе вы можете столкнуться с проблемами синтаксического анализа. Источник
Используете ли вы PHP-инфраструктуру с открытым исходным кодом? Возможно ли включить ваш код в функции / методы, где это необходимо?