我正在使用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() { ... }
3条答案
按热度按时间qzlgjiam1#
您可以将它们(两种类型)组合在一起。在某些情况下可能不理想,但可以工作,您可能会认为它比通过
@var
PHPDoc注解手动指定类型更好。2ledvvac2#
从2021.2开始的Phpstorm允许以下语法:
这适用于Doctrine集合-以及从Laravel 9开始的所有Laravel集合(L 8中不存在所需的注解)。
截图来自PhpStorm 2021.2最新动态:
ocebsuys3#
正如MV1908所述,自2021.2以来,您可以在PHPSorm中使用泛型集合。但是,请注意,这仅适用于自定义集合类(您自己创建的)和Doctrine集合,请参见https://blog.jetbrains.com/phpstorm/2021/07/phpstorm-2021-2-release/
随着PHPSorm 2021.3的发布,现在Laravel集合也可以使用泛型(但仅限于Laravel 9)。https://blog.jetbrains.com/phpstorm/2021/12/phpstorm-2021-3-release/#support_for_future_laravel_collections