Я использую среду PHPStorm и сталкиваюсь с проблемами при запуске проверки кода.
У меня есть метод, который возвращает коллекцию объектов. Сама Collection – это объект, который имеет свои собственные методы и реализует интерфейс Traversable :
class Repository { public function findByCustomer(Customer $user) { // ... return new Collection($orders); } }
Если я findByUser() для возврата Collection , проверка кода findByUser() методы этого объекта, но не понимает, какие объекты содержит коллекция:
/** * @return Collection */ public function findByCustomer() { ... }

Если я findByUser() чтобы вернуть коллекцию объектов Order , проверка кода теперь понимает, что находится внутри коллекции, но не методы самой Collection :
/** * @return Order[] */ public function findByCustomer() { ... }
![Метод slice () не найден в классе Order []](http://img.ruphp.com/php/ZTFSU.png)
Есть ли способ указать оба в то же время, что-то вроде синтаксиса Java?
/** * @return Collection<Order> */ public function findByCustomer() { ... }
Вы можете объединить их (оба типа) вместе. Не может быть идеальным в некоторых ситуациях, но работает, и вы можете рассмотреть его лучше, чем вручную указывать тип через комментарий @var PHPDoc.
/** @return Collection|Order[] */