我正在使用doxygen和我的PHP代码。我的一些类以与此类似的方式包含在if语句中:
if(!class_exists('FooBar', false)) {
/**
* Docs
**/
class FooBar
{
}
}
doxygen似乎不理解这一点并完全忽略class FooBar
。有解决方法吗?
修补doxygen是没问题的,随便建议如何(我想在scanner.l的某处)
答案 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
。它会起作用