【问题标题】:Doxygen - PHP traitsDoxygen - PHP 特征
【发布时间】:2014-12-22 11:40:18
【问题描述】:

我们越来越喜欢 Doxygen,它确实可以创建最好看的文档。

但是,我们使用 PHP,并且 Traits 在生成的文档中被忽略/不存在。

我们是在这里遗漏了一个技巧,还是 Traits 根本不兼容?

【问题讨论】:

  • 也许你可以编写一个过滤器来使 php 特征看起来像 c++ 特征(如果支持)。看看我的thisthis 答案,以获取过滤器示例。
  • @AbcAeffchen 谢谢,我正在检查。
  • @AbcAeffchen 您好,我查看了您对 git 的贡献,这很棒。不幸的是,我没有足够的 C++ 知识来理解如何将 PHP 特征语法转换为 C++ 特征语法。看了一眼之后,您认为将trait traitName { [methods] } 替换为template traitName { [methods] } 可以做到吗?
  • @LorenzMeyer 我也不太了解 C++。但你可以试试。可能发生的最坏情况是,它不起作用。然后你可以删除过滤器:) 但我可以仔细看看它。如果我找到解决方案,我会在此处和我的 GitHub 存储库中发布。
  • @AbcAeffchen 我试过的没有用。但是在阅读一些关于 C++ 特征的介绍时,我不再确定 C++ 特征是否与 php 特征相似。

标签: php doxygen traits


【解决方案1】:

doxygen 不支持特征。

由于 PHP 不支持从多个类继承,因此 Trait 是通过多个“类”的函数来扩展一个类的方式。

C++ 确实支持从多个类继承,所以试试这个过滤器:

// make traits to classes
$regexp = '#trait([\s]+[\S]+[\s]*){#';
$replace = 'class$1{';
$source = preg_replace($regexp, $replace, $source);

// use traits by extending them (classes that not extending a class)
$regexp = '#class([\s]+[\S]+[\s]*)(implements[\s]+[\S]+[\s]*)?{[\s]+use([^;]+);#';
$replace = 'class$1 extends $3 $2 {';
$source = preg_replace($regexp, $replace, $source);

// use traits by extending them (classes that already extending a class)
$regexp = '#class([\s]+[\S]+[\s]+extends[\s]+[\S]+[\s]*)(implements[\s]+[\S]+[\s]*){[\s]+use([^;]+);#';
$replace = 'class$1, $3 $2{';
$source = preg_replace($regexp, $replace, $source);

这个过滤器可以:

  1. 将特征转换为类

    trait MyTrait{ ... }
    

    变成

    class MyTrait{ ... }
    
  2. 将“使用”特征转换为“扩展”特征

    class MyClass{
        use MyTrait1, MyTrait2;
        ...
    }
    

    变成

    class MyClass extends MyTrait, MyTrait2{
        ...
    }
    

Doxygen 将其记录为多重继承。也许这对你有用。

你可以找到这个以及更多doxygen filters for PHP in my repository on GitHub

【讨论】:

  • 这看起来很有希望。感谢您的出色工作。我今天会试试看。
  • 不幸的是,我不能接受它作为答案...我为extendsimplements 类的情况编辑它。
  • 有了这个小小的补充,一切都很好。我不能接受你的回答,因为我没有问这个问题。
  • 我刚看到这个。对不起,我还没醒:D
  • 我还没有把注意力转向解决这个问题。项目截止日期变得比文档更重要。这对我很有用。非常感谢。
猜你喜欢
  • 2013-12-21
  • 2015-04-03
  • 1970-01-01
  • 1970-01-01
  • 2016-08-20
  • 2016-07-30
  • 2018-06-20
  • 2013-12-06
  • 2011-05-26
相关资源
最近更新 更多