PHP Doc泛型类型声明

时间:2015-09-17 10:35:10

标签: php phpdoc

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

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

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

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

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

}

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

3 个答案:

答案 0 :(得分:3)

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

  

generic = collection-type“&lt;” [type-expression“,”* SP] type-expression“&gt;”

但是,它没有提供将类定义为通用的方法,并且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

答案 1 :(得分:0)

您可能想签出psalm项目。

https://psalm.dev/docs/

https://github.com/vimeo/psalm

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

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

答案 2 :(得分:0)

Psalm 通过

支持这一点
/**
 * @template T of Foo
 */

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