【问题标题】:Doxygen strange problem while documenting PHP if记录PHP时的Doxygen奇怪问题如果
【发布时间】:2025-12-03 02:00:01
【问题描述】:

我在尝试记录我的项目时遇到了一个奇怪的问题。我有以下代码:

//! 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$actionaction2action3

我花了很多时间试图弄清到底是哪里出了问题,但没有运气,所以欢迎每一个建议。

系统是: 带有 Doxygen 1.7.4 的 Windows XP x64。 (我使用的是 Doxygen GUI)

更新 另外,当我的代码中有类似的东西时(注意if 语句中缺少else)。当我添加}else{} 时,它可以工作。下一个$variables 没有再次记录,但该更新是关于if/else

Doxygen 将其转换为 this

【问题讨论】:

  • @yes123 我相信它会从 PHP cmets 生成文档。
  • 增加了 150 声望赏金,有人吗?
  • 由于所有 3 个解决方案(到目前为止)都是有效的,并且每个解决方案都提供了非常有用的信息,我不得不给 3 个投票支持,并为 David 打上复选标记,这是第一个并且还指向附加链接,如果决定开始使用 doxygen,这对某人非常有帮助。

标签: php doxygen


【解决方案1】:

查看此http://www.doxygen.nl/manual/autolink.html,它解释了您在第一个代码 sn-p 中看到的怪异之处。

不幸的是,Doxygen 不能很好地记录过程 PHP 代码,并且在检查了我自己的所有 doxygen 生成的文档后,我找不到任何函数或方法的任何记录变量,除非它们是定义的类属性。

否则,我认为最大的 PHP Doxygen 友好项目是 Drupal,他们编写的指南是为了充分利用 Doxygen 的评论处理系统。 http://drupal.org/node/1354

请注意,如果这不是您要寻找的答案,或者我完全偏离目标,请立即通知我,以便我删除此答案。

【讨论】:

    【解决方案2】:

    我相信这是解析 php 时 doxygen 中的一个错误。 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,您可能会考虑这样做。

    【讨论】:

    • 感谢您的回复。我认为 (1) 是一个很好的解决方案,现在当您指出这一点时,我在 (stack.nl/~dimitri/doxygen/autolink.html) 上查看了 doxygen 的文档,我看到即使他们使用 ;到底。不错的缓存!关于 (2) 我从 phpdoc 开始,但之后因为灵活性而切换到 doxygen - 特别是添加自定义别名并使用它们的 GUI 也使事情变得容易一些。我喜欢 phpdoc,但很长一段时间都没有支持(也没有 doxygen 有一些常量)。无论如何,我最喜欢会使用你的建议。谢谢!
    【解决方案3】:

    仅限 PHP:Doxygen 要求所有 PHP 语句(即代码)被包装 在函数/方法中,否则你 可能会遇到解析问题。 Source

    您使用的是开源 php 框架吗?是否可以在需要时将代码包装成函数/方法?

    【讨论】:

    • 谢谢,这似乎解决了部分问题。代码完全是我的,所以我可以修复任何需要的东西。谢谢!