我正在使用一个使用phpDocumentor规范来确定使用反射的类型系统的库。但是,我无法找到有关泛型类型声明的任何信息。
是否应该指定泛型类型声明?
例如:是否有任何规范(正在进行中)指定类似的内容:
/**
* @template <T extends Base>
*/
class Collection {
/**
* @return Iterator<T>
*/
function get_iterator();
}
注意,上面的代码只是一个示例,用于说明泛型类型声明的含义。我不希望这与集合和迭代器有任何关系。
答案 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 documentation或JSDoc等类似语法的启发),同时谨慎地避免任何可能积极的事情混淆phpDocumentor,如:
/**
* @template {Base} T
*/
/**
* @return Iterator {Iterator<T>}
*/
如果您想要正式执行此操作,则需要切换到其他文档系统,例如doxygen。
答案 1 :(得分:0)
您可能想签出psalm项目。
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