Php doxygen忽略封装在语句中的类
我在php代码中使用了doxygen。我的一些类以类似以下方式包装在if语句中:Php doxygen忽略封装在语句中的类,php,class,doxygen,Php,Class,Doxygen,我在php代码中使用了doxygen。我的一些类以类似以下方式包装在if语句中: if(!class_exists('FooBar', false)) { /** * Docs **/ class FooBar { } } doxygen似乎不理解这一点,完全忽略了class FooBar。有解决办法吗 修补doxygen不会有问题,请随意建议如何(我猜是在某个地方)删除false。它将起作用Doxygen不会用它的静态分析解释代码,因此
if(!class_exists('FooBar', false)) {
/**
* Docs
**/
class FooBar
{
}
}
doxygen似乎不理解这一点,完全忽略了class FooBar
。有解决办法吗
修补doxygen不会有问题,请随意建议如何(我猜是在某个地方)删除
false
。它将起作用Doxygen不会用它的静态分析解释代码,因此if子句只是代码,而类定义在文档中没有考虑(这也是有意义的,因为它只是有条件的,很可能不需要)
将类定义外部化,以便静态代码分析不会出现问题。这个类定义也可以很容易地被要求。它还与自动加载兼容(本答案中未记录),Doxygen对此没有问题
...
if (!class_exists('Myfile', false))
{
require(__DIR__ . '/Myfile.php');
}
...
Myfile.php
<?php
class Myfile
{
...
}
由于我不会说PHP,我将提供一个可能与强氧剂相关的答案:
尝试使用对doxygen隐藏代码的\cond
命令包围包装器组件
/** \cond */
if(!class_exists('FooBar', false)) {
/** \endcond */
/**
* Docs
**/
class FooBar
{
}
/** \cond */
}
/** \endcond */
我不确定这是否会起作用-这取决于Doxygen的解析顺序-但在您开始打开修改Doxygen将带来的复杂问题之前,似乎值得一试。您也可以使用此过滤器(复制自):
首先,你应该想一想为什么你需要这么乱。你看过这个问题吗:?这个问题和你的不太一样,但它可以给你一些想法,让你尝试一些东西,比如添加一个代码>在if
块的末尾。@thg435更简单:不要声明两次类。。。这不是语言的问题,而是如何使用它(顺便说一句:如果您试图重新声明标识符,大多数语言都会中断…)。总而言之:每个类声明一次,然后使用和autoloader(可能是自定义的)。您就不会有这个问题。@thg435使用名称空间怎么样?反过来说。蹩脚的解决方法=>蹩脚的语言(为您)。另外,它与PHP无关,doxygen如何解析它……请大家冷静下来。你应该为问题的清晰性和有用性评分,而不是为导致问题的情况评分(我们没有任何信息)。谢谢,这听起来是一个合理的建议。这意味着什么?class_exists('Myfile')——尝试第二个参数,bool,默认为false。它可能根本不受支持。或者只删除类_exist()。解析在执行开始时完成一次,所有类都被记录下来,所以不用担心,谢谢,但这不是我的问题的全部内容。很高兴能够提供帮助,尽管有您慷慨的奖励。
<?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;