doxygen忽略包含在语句中的类

时间:2014-02-13 21:32:54

标签: php class doxygen

我正在使用doxygen和我的PHP代码。我的一些类以与此类似的方式包含在if语句中:

if(!class_exists('FooBar', false)) {

    /**
     * Docs
     **/
    class FooBar
    {

    }
}

doxygen似乎不理解这一点并完全忽略class FooBar。有解决方法吗?

修补doxygen是没问题的,随便建议如何(我想在scanner.l的某处)

4 个答案:

答案 0 :(得分:4)

Doxygen不会通过静态分析解释您的代码,因此if子句只是代码而且类定义没有用于文档(这也是有意义的,因为它只是有条件的,很可能不需要)。

外化类定义,以便静态代码分析没有问题。这样的定义也很容易。它也与自动加载兼容(本答复中未记录),Doxygen没有问题。

...

if (!class_exists('Myfile', false))
{
    require(__DIR__ . '/Myfile.php');
}

...

<强> Myfile.php

<?php
class Myfile
{
    ...
}

答案 1 :(得分:2)

由于我不会说PHP,我会提供与Doxygen相关的答案:

尝试用\cond命令包围包装器组件,以隐藏doxygen中的代码。

/** \cond */
if(!class_exists('FooBar', false)) {
/** \endcond */

    /**
     * Docs
     **/
    class FooBar
    {

    }

/** \cond */
}
/** \endcond */

我不确定这是否会起作用 - 它取决于Doxygen的解析顺序 - 但在开始修改doxygen将引入的复杂性之前,似乎值得一试。

答案 2 :(得分:1)

您也可以使用此过滤器(从GitHub复制):

<?php

// Get the input
$source = file_get_contents($argv[1]);
// removes the whole line
list($head,$tail) = preg_split('/.*if\(!class_exists\(.+/', $source, 2);
$openingBracePos = strpos($tail,'{');
$closingBracePos = strrpos($tail,'}');
if($openingBracePos !== false && $closingBracePos !== false)
    $source = $head . substr($tail,$openingBracePos+1,
                             $closingBracePos-$openingBracePos-1);
// Output
echo $source;

此过滤器删除if(!class_exists(...))语句,因此doxygen了解代码,而不会更改代码本身。

答案 3 :(得分:0)

删除false。它会起作用