【问题标题】:Doxygen not documenting php code inside if tagsDoxygen 没有在 if 标记中记录 php 代码
【发布时间】:2014-11-27 21:10:00
【问题描述】:

我正在使用 doxygen,但它没有记录我的一些课程。所有这些类的调用方式如下:

<?php
if(!class_exists('a')){
    class a{

        function b(){
            print 'c';
        }
    }
}
?>

我认为它与 if(!class_exists('a')) 有关,我怎样才能让 doxygen 仍然记录这一点?

【问题讨论】:

  • 您是否尝试过在班级上方放置一个文档块?和你一样,我猜这与控制结构中的类有关。
  • 是的,我做了,但我也设置了 doxygen 来记录未记录的结构。
  • 好吧,我很好奇。我也使用 doxygen,只是不像你上面显示的那样。我在想类上方的 docblock 会强制它记录该结构。
  • 这是this Question的副本

标签: php class documentation doxygen


【解决方案1】:

Doxygen 在记录 php 代码时存在许多问题。其中许多问题可以通过使用input_filter 来纠正。

使用以下代码作为过滤器

<?php
$source = file_get_contents($argv[1]);
$regexp = '#(<\?php[\s]+)(if\(!class_exists\([^\)]+\)\)\{)([\s\S]*)(\})([\s]*\?>)#';
$replace = '$1 $3 $5';
$source = preg_replace($regexp, $replace, $source);
echo $source;
?>

并输入为

/path/to/php php_var_filter.php

进入INPUT_FILTER 设置。

注意:这样您可以解决许多 doxygen 问题。如果某些东西不起作用,那是因为 c(或 c++)代码与 php 代码之间存在差异(很可能)。您可以使用 input_filter 更改您的 php 代码,使其看起来更像 c 代码。这将解决许多问题。

编辑
也许您还想考虑自动加载功能。我认为这是获得if(!class_exists(..))-result 的更好方法。

编辑 我只是注意到我已经回答了一个不同的类似问题。你也可以使用这个answer

您可以在GitHub 上找到更多输入过滤器来改进 doxygen 的 php 支持。

【讨论】:

    猜你喜欢
    • 2012-06-02
    • 2016-02-07
    • 2020-12-02
    • 1970-01-01
    • 2011-11-05
    • 2011-06-27
    • 2013-03-22
    • 2010-11-06
    • 2012-08-15
    相关资源
    最近更新 更多