Doxygen:@var使用命名空间

时间:2017-08-14 17:32:45

标签: php namespaces doxygen

我开始使用Doxygen来记录我的PHP代码。请参阅以下示例:

namespace \MyClasses;

class Order {
    /**
     * Some Description
     *
     * @var \MyClasses\Customer $customer
     */
    protected $customer;
}

@var命令将MyClasses Customer MyClasses\Order::$customer呈现为类型而不是\MyClasses\Customer MyClasses\Order::$customer,这将是正确的,使命名空间保持不变。有没有办法实现这个目标?放两个反斜杠\\MyClasses\\Customer也不起作用。

另一方面,

@param似乎与命名空间一起使用。

我使用的是最新版本1.8.13。配置几乎是默认的。

1 个答案:

答案 0 :(得分:1)

如果有人仍然遇到这个问题,就会在doxygen的支持下“解决”。这是Bugzilla bug_795953(现在位于:https://github.com/doxygen/doxygen/issues/5553)。

所有你需要做的(在PHP文件中)是为doxygen创建/定制INPUT_FILTER并包含这段代码:

<?php
// Input
$source = file_get_contents($argv[1]);
// removes preceding '\' or '::' for the use of namespaces.
$regexp = '/ \\\\/';
$replace = ' ';
$source = preg_replace($regexp, $replace, $source);
// adds possibility to use '\' for namespaces
$regexp = '/\\\\/';
$replace = '::';
$source = preg_replace($regexp, $replace, $source);
// Output
echo $source;
?>

如果您使用以'@'开头的所有文档“命令”(@ var,@ param等),则此方法有效。如果你不这样做,你必须对regexp进行一些调整,并让它像这样工作。

doxygen无法识别命名空间的原因是因为'\'键被设置为doxygen的命令,所以它不能用于代码中的任何其他内容。因此,将所有'\'更改为'::'将使其理解这是命名空间引用。