【问题标题】:PHP Doc generic type declarationPHP Doc 泛型类型声明
【发布时间】:2015-12-14 04:47:53
【问题描述】:

我正在开发一个库,该库使用 phpDocumentor 规范来确定使用反射的类型系统。但是,我找不到任何关于泛型类型声明的信息。

是否应该指定泛型类型声明?

例如:是否有任何规范(正在进行中)指定如下内容:

/**
 * @template <T extends Base>
 */
class Collection {

    /**
     * @return Iterator<T>
     */
    function get_iterator();

}

请注意,上面的代码只是一个示例,用于说明我所说的泛型类型声明。我不希望这与集合和迭代器有任何关系。

【问题讨论】:

  • PHP 没有泛型?你从哪里得到这个?
  • 这看起来是不是有点像你想要的abstract class Collection implements \Iterator {}
  • @NDM 我知道 PHP 不支持它。这并不意味着它不能在 phpDocumentor 或任何派生中得到支持。这就是我的问题所在。
  • @NDM 因为你不明白这个问题,并不意味着它不清楚。
  • 如果获得批准,这可能是下一代 php 文档:github.com/phpDocumentor/fig-standards/blob/master/proposed/…

标签: php phpdoc


【解决方案1】:

显然有人对对象专业化的相关主题感兴趣,因为那是added to PSR-5

generic = collection-type ""

编辑:then removed,正如杰克在下面指出的那样,尽管他们明确表示他们会在标准化之前以一种或另一种形式返回

但是,它没有提供将类定义为泛型的方法,并且 PSR-5 已被废弃很长时间。事实标准,phpDocumentor,does not in any way define support for such syntax

如果你想非正式地标记泛型,你最好编写自己的语法(受类似语法的启发,例如 Closure's documentationJSDoc),同时小心避免任何可能主动混淆 phpDocumentor 的东西,喜欢:

/**
 * @template {Base} T
 */
/**
 * @return Iterator {Iterator<T>}
 */

如果你想正式做,你需要切换到另一个文档系统,比如doxygen

【讨论】:

【解决方案2】:

您可能想查看 psalm 项目。

https://psalm.dev/docs/

https://github.com/vimeo/psalm

它支持文档中的泛型,以及更多。 Symfony 的 DB ORM 学说也使用它。

它支持 Emacs、Phpstorm/Intellij、vim 和 Visual Studio

【讨论】:

    【解决方案3】:

    诗篇支持这一点

    /**
     * @template T of Foo
     */
    

    参考:https://medium.com/vimeo-engineering-blog/uncovering-php-bugs-with-template-a4ca46eb9aeb

    【讨论】:

      猜你喜欢
      • 2018-12-14
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多