PHP中的双重包含预防代码可防止生成文档中的Doxygen

时间:2014-06-30 08:12:29

标签: php doxygen

我正在编写相对复杂的PHP应用程序,并且有几个类定义的文件格式如下:

<?php

if(!class_exists("FooBar"))
{

/**
 * This is documentation for the class FooBar
 */
class FooBar
{
    /**
     * Documentation for FooBar's constructor
     */
    public function __construct() {
        ;
    }
}

} // class_exists

这是为了防止复杂的类层次结构和应用程序出现多个定义错误。

但是,Doxygen不会记录以这种方式指定的任何类。注释掉或删除if(!class_exists())语句会导致Doxygen正确记录此类,但会引入应用程序错误。

有什么方法可以强制Doxygen为这些类生成文档吗?

1 个答案:

答案 0 :(得分:1)

正如@Sverri在评论中所提到的,我也认为自动加载是解决问题的好方法(它似乎已经做了什么)。

但仅仅是因为你(或其他人)正在寻找一种只有doxygen的解决方案:

在创建文档之前,您可以使用doxygen中的INPUT_FILTERS删除或更改源代码的某些部分。

您可以使用以下php代码删除包含if(!class_exists的所有行以及属于此{ - 块的大括号} if,只要它是没有跟着另一个街区。

// 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);

echo $source;

此过滤器结束

<?php

if(!class_exists("FooBar"))     // This comment will also disappear
{

/**
 * This is documentation for the class FooBar
 */
class FooBar
{
    /**
     * Documentation for FooBar\'s constructor
     */
    public function __construct() {
        ;
    }
}

} // class_exists

<?php



/**
 * This is documentation for the class FooBar
 */
class FooBar
{
    /**
     * Documentation for FooBar's constructor
     */
    public function __construct() {
        ;
    }
}

注意:在Windows上我必须像这样调用过滤器:C:\xampp\php\php.exe php_var_filter.php

你可以找到更多输入过滤器来改善do GitHub上的doxygen的php支持。