PHPStorm: правильный PHPDoc для коллекции объектов?

Я использую PHPStorm IDE и сталкиваюсь с проблемами при запуске проверки кода.

У меня есть метод, который возвращает коллекцию объектов. Сам Collection является объектом, который имеет свои собственные методы и реализует интерфейс Traversable:

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

Если я документирую findByUser(), чтобы вернуть Collection, проверка кода понимает методы этого объекта, но не понимает, какие объекты содержит коллекция:

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

Method getTotal() not found in class Collection

Если я документирую findByUser(), чтобы вернуть коллекцию объектов Order, проверка кода теперь понимает, что внутри коллекции, но не методы самого Collection:

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

Method slice() not found in class Order[]

Есть ли способ указать оба одновременно, что-то вроде синтаксиса Java?

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

Ответ 1

Вы можете объединить их (оба типа) вместе. Не может быть идеальным в некоторых ситуациях, но работает, и вы можете рассмотреть его лучше, чем вручную указывать тип через @var комментарий PHPDoc.

/** @return Collection|Order[] */