我正在编写相对复杂的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为这些类生成文档吗?
答案 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支持。