33

我正在使用PHPStorm IDE,在运行代码检查时遇到了麻烦。

我有一个返回对象集合的方法。它Collection本身是一个对象,它有自己的方法,并实现了Traversable接口:

class Repository
{
    public function findByCustomer(Customer $user)
    {
        // ...
        return new Collection($orders);
    }
}

如果我记录findByUser()返回 a Collection,则代码检查了解此对象的方法,但不了解集合包含哪些对象:

/**
 * @return Collection
 */
public function findByCustomer() { ... }

在类 Collection 中找不到方法 getTotal()

如果我记录findByUser()返回Order对象集合,代码检查现在了解集合内部的内容,但不了解其Collection本身的方法:

/**
 * @return Order[]
 */
public function findByCustomer() { ... }

在类 Order[] 中找不到方法 slice()

有没有办法同时指定两者,比如 Java 的语法?

/**
 * @return Collection<Order>
 */
public function findByCustomer() { ... }
4

2 回答 2

63

您可以将它们(两种类型)组合在一起。在某些情况下可能并不理想,但可以工作,您可能会认为它比通过@varPHPDoc 注释手动指定类型更好。

/** @return Collection|Order[] */
于 2012-05-23T09:58:15.323 回答
12

从 2021.2 开始的 Phpstorm 允许使用以下语法:

/**
 * @return Collection<Order>
 */

PhpStorm 2021.2 新增功能截图:
来自 PhpStorm 的屏幕截图 What's New 2021.2

于 2021-10-15T12:17:38.027 回答