当我试图记录我的一个项目时,我遇到了一个奇怪的问题。我有以下代码:
//! 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
,action2
和action3
。
我花了很多时间试图了解究竟是什么问题,但没有运气,所以每个建议都受到欢迎。
系统是: 带有Doxygen 1.7.4的Windows XP x64。 (我正在使用Doxygen GUI)
更新
此外,当我在我的代码中有类似的东西时(请注意else
语句中缺少if
。当我添加}else{}
但是它有效。未再次记录下一个$variables
,但该更新是关于if/else
。
Doxygen将其转换为此
答案 0 :(得分:5)
查看此http://www.doxygen.nl/manual/autolink.html,其中解释了您在第一个代码段中看到的奇怪现象。
不幸的是,Doxygen不能很好地记录程序化的PHP代码,并且在检查了我自己的doxygen生成的文档之后,我找不到任何函数或方法的任何文档变量,除非它们是定义的类属性。
否则,我认为最大的PHP Doxygen友好项目是Drupal,他们的指导方针是使用Doxygen的评论处理系统来完成的。 http://drupal.org/node/1354
请注意,如果这不是您正在寻找的答案,或者我完全没有目标,请立即通知我,以便删除此答案。
答案 1 :(得分:2)
我认为解析php时doxygen中存在一个bug。 2008年有一个类似的问题已经解决但从未解决过 - https://bugzilla.gnome.org/show_bug.cgi?id=528815
我愿意打赌你的问题是相关的。
我有几点建议:
1)我可能偶然发现了一种解决方法。在块之后添加分号似乎使其行为正确。
if ($action) {
echo 'something 1';
}else{
echo 'something 2';
};
但是,我不知道这是否会导致doxygen解析的其他问题。
2)我在我的c ++项目中使用doxygen,但是我的php项目使用了phpdoc,因为我有更好的结果。如果由于政治或实际原因你没有与doxygen联系,你可能会考虑这样做。
答案 2 :(得分:1)
仅限PHP:Doxygen需要全部 PHP语句(即代码)被包装 在函数/方法中,否则你 可能遇到解析问题。 Source
您使用的是开源php框架吗?是否可以将代码包装到需要的函数/方法中?