PHPStorm:对象集合的正确 PHPDoc?
Posted
技术标签:
【中文标题】PHPStorm:对象集合的正确 PHPDoc?【英文标题】:PHPStorm: correct PHPDoc for a Collection of Objects? 【发布时间】:2012-05-29 05:27:46 【问题描述】:我正在使用phpStorm IDE,在运行代码检查时遇到了麻烦。
我有一个返回对象集合的方法。 Collection
本身是一个对象,有自己的方法,实现了Traversable接口:
class Repository
public function findByCustomer(Customer $user)
// ...
return new Collection($orders);
如果我记录 findByUser()
以返回 Collection
,代码检查会了解此对象上的方法,但不了解集合包含哪些对象:
/**
* @return Collection
*/
public function findByCustomer() ...
如果我记录 findByUser()
以返回 Order
对象的集合,代码检查现在可以了解集合中的内容,但不了解 Collection
本身的方法:
/**
* @return Order[]
*/
public function findByCustomer() ...
有没有办法同时指定两者,比如 Java 的语法?
/**
* @return Collection<Order>
*/
public function findByCustomer() ...
【问题讨论】:
您可以将它们(两种类型)组合在一起。在某些情况下可能并不理想,但可以工作,您可能会认为它比通过 @var PHPDoc 注释手动指定类型更好。所以.../** @return Collection|Order[] */
@LazyOne:即使不是完美的,这对我来说也是一个更干净的选择。您可以将此添加为答案吗?
【参考方案1】:
您可以将它们(两种类型)组合在一起。在某些情况下可能并不理想,但可以工作,您可能会认为它比通过@var
PHPDoc 注释手动指定类型更好。
/** @return Collection|Order[] */
【讨论】:
在这种情况下,它甚至可以读取:return Collection,而不是可以看作是一个 Order 数组。 不幸的是,这在 PHPStorm 8 中似乎不再起作用:它现在检查由|
分隔的两种类型是否具有该方法。现在有更好的方法来输入提示吗?
@Benjamin 请提供一些简单的代码示例来复制粘贴(我想自己深入了解一下)
@LazyOne 我很惊讶我现在不能重复它,当我第一次打开 PHPStorm 8 时,我遇到了所有这些检查问题。这可能不是我想的那样,实际上与@有关987654321@你刚刚评论了!【参考方案2】:
从 2021.2 开始的 Phpstorm 允许使用以下语法:
/**
* @return Collection<Order>
*/
PhpStorm 2021.2 新增功能的屏幕截图:
【讨论】:
我一直在等待这样的功能……以上是关于PHPStorm:对象集合的正确 PHPDoc?的主要内容,如果未能解决你的问题,请参考以下文章
PhpStorm - 有没有办法将 PHPDoc 转换为类型提示并返回类型声明?