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 转换为类型提示并返回类型声明?

PhpStorm - 如何正确输入提示数组键?

如何使用 PHPDoc 对 Callable 的参数进行类型提示?

PhpStorm 文档提示方法的指定结果

PhpStorm 完成,类型提示泛型

为啥 PhpStorm 会报“参数类型不匹配”错误?