Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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
Doxygen:如何在php中描述类成员变量?_Php_Variables_Doxygen - Fatal编程技术网

Doxygen:如何在php中描述类成员变量?

Doxygen:如何在php中描述类成员变量?,php,variables,doxygen,Php,Variables,Doxygen,我试图使用doxygen将php代码解析为xml输出。 Doxygen不解析类成员变量的描述 以下是我的示例php文件: <?php class A { /** * Id on page. * * @var integer */ var $id = 1; } ?> 注意注释有一个简短的描述和变量类型。 以下是我从该来源获得的xml: <?xml version='1.0' encoding='UTF-8' s

我试图使用doxygen将php代码解析为xml输出。 Doxygen不解析类成员变量的描述

以下是我的示例php文件:

<?php
class A
{
    /**
      * Id on page.
      *
      * @var integer
      */
    var $id = 1;
}
?>

注意注释有一个简短的描述和变量类型。 以下是我从该来源获得的xml:

<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:noNamespaceSchemaLocation="compound.xsd" version="1.7.2">
  <compounddef id="class_a" kind="class" prot="public">
<compoundname>A</compoundname>
  <sectiondef kind="public-attrib">
  <memberdef kind="variable" id="class_a_1ae97941710d863131c700f069b109991e" prot="public" static="no" mutable="no">
    <type></type>
    <definition>$id</definition>
    <argsstring></argsstring>
    <name>$id</name>
    <initializer> 1</initializer>
    <briefdescription>
    </briefdescription>
    <detaileddescription>
    </detaileddescription>
    <inbodydescription>
    </inbodydescription>
    <location file="C:/projects/version6-7/asprunner/PHP/source/classes/a.php" line="11" bodyfile="C:/projects/version6-7/asprunner/PHP/source/classes/a.php" bodystart="11" bodyend="-1"/>
  </memberdef>
  </sectiondef>
<briefdescription>
</briefdescription>
<detaileddescription>
</detaileddescription>
<location file="C:/projects/version6-7/asprunner/PHP/source/classes/a.php" line="5" bodyfile="C:/projects/version6-7/asprunner/PHP/source/classes/a.php" bodystart="4" bodyend="12"/>
<listofallmembers>
  <member refid="class_a_1ae97941710d863131c700f069b109991e" prot="public" virt="non-virtual"><scope>A</scope><name>$id</name></member>
</listofallmembers>
  </compounddef>
</doxygen>

A.
$id
$id
1.
$id
未分析描述或类型。
如何修复此问题?

这似乎是Doxygen中的一个错误。我对HTML文档也有同样的问题

目前起作用的是:

class A
{
    var $id = 1; /**< Id on page. */
}
A类
{
var$id=1;/**

但是NetBeans IDE不将这些注释视为字段的文档。

虽然这并不是对您的问题的直接回答:如果您可以自由地使用正确的工具进行作业,请查看。它还生成一个XML文档,用于进一步转换为HTML或任何其他显示格式,非常适合PHP。它也不会破坏您通常使用的docblock


作为一个示例输出,请查看。

如果省略@var,则该块将正确关联。这不会提供任何位置来声明类型,这很烦人,但至少说明会起作用


测试版本:Doxygen 1.7.1

我正在使用输入过滤器插入@var注释中与变量声明内联的类型提示,并删除@var注释,因为它在Doxygen中具有不同的含义。有关更多信息,请参阅bug

由于Doxygen使用类似C的解析器,因此在运行输入过滤器时,它可以识别类型

<?php
$source = file_get_contents($argv[1]);

$regexp = '#\@var\s+([^\s]+)([^/]+)/\s+(var|public|protected|private)\s+(\$[^\s;=]+)#';
$replac = '${2} */ ${3} ${1} ${4}';
$source = preg_replace($regexp, $replac, $source);

echo $source;

我也遇到了同样的问题,所以我创建了一个简单的输入过滤器,它将

/**
 * @var int
 */
public $id;
进入

无论如何,这是多余的。这样,Eclipse IDE可以使用与doxygen相同的docblock

您可以从此处下载输入筛选器:

请参阅有关如何使用输入筛选器的说明


该工具还可以在docblock中避免反斜杠,因此您可以在那里使用名称空间。

非常感谢Goran提供的doxygen过滤器!将同样的想法稍加扩展,以便对函数参数进行适当的记录:

在doxygen文档中包括Zend Studio风格的对象数组@param类型:

// Change the following:
// /** @param VarType[] $pParamName Description **/
// function name(array $pParamName) {

// Into:
// /** @param array $pParamName Description **/
// function name(VarType[] $pParamName) {
$regexp = '#\@param\s+([^\s]+)\[\]\s+(\$[^\s]+)\s+([^/]+)/\s+(public|protected|private)?\s+function\s+([^\s]+)\s*\(([^)]*)array\s+\2([^)]*)\)(\s+){#s';
$replac = '@param array ${2} ${3}/ ${4} function ${5} (${6} ${1}[] ${2}${7})${8}{';
$lSource = preg_replace($regexp, $replac, $lSource);
// Change the following:
// /** @param (int|float|double|string) $pParamName Description **/
// function name($pParamName) {

// Into:
// /** @param (int|float|double|string) $pParamName Description **/
// function name((int|float|double|string) $pParamName) {
$regexp = '#\@param\s+(int|float|double|string)\s+(\$[^\s]+)\s+([^/]+)/\s+(public|protected|private)?\s+function\s+([^\(\s]+)\s*([^)]*)(\(|,)\s*\2([^)]*)\)(\s+){#s';

$replac = '@param ${1} ${2} ${3}/ ${4} function ${5}${6}${7}${1} ${2}${8})${9}{ '; //${6}${1} ${2}${7})${8}{';
$lSource = preg_replace($regexp, $replac, $lSource);
在doxygen文档中包括int/float/double/string@param类型:

// Change the following:
// /** @param VarType[] $pParamName Description **/
// function name(array $pParamName) {

// Into:
// /** @param array $pParamName Description **/
// function name(VarType[] $pParamName) {
$regexp = '#\@param\s+([^\s]+)\[\]\s+(\$[^\s]+)\s+([^/]+)/\s+(public|protected|private)?\s+function\s+([^\s]+)\s*\(([^)]*)array\s+\2([^)]*)\)(\s+){#s';
$replac = '@param array ${2} ${3}/ ${4} function ${5} (${6} ${1}[] ${2}${7})${8}{';
$lSource = preg_replace($regexp, $replac, $lSource);
// Change the following:
// /** @param (int|float|double|string) $pParamName Description **/
// function name($pParamName) {

// Into:
// /** @param (int|float|double|string) $pParamName Description **/
// function name((int|float|double|string) $pParamName) {
$regexp = '#\@param\s+(int|float|double|string)\s+(\$[^\s]+)\s+([^/]+)/\s+(public|protected|private)?\s+function\s+([^\(\s]+)\s*([^)]*)(\(|,)\s*\2([^)]*)\)(\s+){#s';

$replac = '@param ${1} ${2} ${3}/ ${4} function ${5}${6}${7}${1} ${2}${8})${9}{ '; //${6}${1} ${2}${7})${8}{';
$lSource = preg_replace($regexp, $replac, $lSource);

上述两个正则表达式自然也适用于具有多个参数的函数。也只是一个快速的黑客,这对我们的代码有效,希望它能帮助其他人

对于没有安装php的windows用户来说,这似乎是目前最好的解决方案,我问了Doxygen邮件列表上的人,他们也回答了同样的问题。谢谢谢谢你的链接。我想从现在开始我将使用DocBlox:)它真的可以与多个参数函数一起工作,并对每个参数在两个位置进行正确的“编辑”,而不管最初是否为其提供了PHP类型提示?