我想开始使用Criteria
,但我有一个非常基本的问题,我无法找到任何信息。
比方说,我有一个有一个方法getStudents
的实体。此方法可以返回ArrayCollection
或PersistentCollection
,都有来自matching
接口来的Selectable
方法。现在的问题是,我应该键入暗示的getStudents
方法的返回值?那里到处看了看我,人建议使用Collection
接口作为一种提示,这是由这两个类共享,但因此它不具有Selectable
方法此接口不扩展matching
!所以它看起来像有一些不一致。
在很多教程,例如here,我们有这样的事情:
public function getExpertScientists()
{
$criteria = Criteria::create()
->andWhere(Criteria::expr()->gt('yearsStudied', 20))
->orderBy(['yearsStudied', 'DESC']);
return $this->getGenusScientists()->matching($criteria);
}
但是,如果$this->getGenusScientists()
的类型是暗示,不具有匹配方法Collection
,它会产生在我的IDE警告,感觉像什么是错的。
你如何处理?我们有超过忽视IDE警告或typehinting可以通过我们的getter返回的一切其他任何选项(如:@return ArrayCollection|PersistentCollection
)?
不知道其他的IDE,所以我会回答的PHPStorm。
我总是用@return Collection|Selectable
和它的伟大工程。并且如果该方法返回例如Student
实体,也可以typehint它。 @return Collection|Selectable|Student[]
所以IDE既了解学说收藏的东西,但它也可以,如果你遍历后来typehint Student
方法或访问单个元素。
当然,在语义上并没有太大的意义,因为你所期望的类似@return Collection&Selectable&Student[]
因为你正在返回路口类型,而不是联盟类型。
而从PHPStorm版本2018.3,您可以实际使用甚至交集类型(见this update),所以@return Collection&Selectable&Student[]
作品,它可以帮助你在你的代码中的实际集和交集类型区分。