看起来doxygen在这类代码上有一些问题,但是。。。有一些解决方案。。。
您可以使用INPUT_FILTER是的。doxygen文档之后:
INPUT\\u FILTER标记可用于指定doxygen应调用的程序,以过滤每个输入文件。Doxygen将通过执行(通过popen())命令来调用过滤器程序:
因此,您可以将此脚本用作过滤器(如本答案中所建议的:https://stackoverflow.com/a/26206860/217040):
<?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;
?>
或者另一个(
https://stackoverflow.com/a/25655189/217040):
// 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;