Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php doxygen忽略封装在语句中的类_Php_Class_Doxygen - Fatal编程技术网

Php doxygen忽略封装在语句中的类

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不会用它的静态分析解释代码,因此

我在php代码中使用了doxygen。我的一些类以类似以下方式包装在if语句中:

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;