原则:如何typehint一个getter返回实体的集合

问题描述 投票:4回答:1

我想开始使用Criteria,但我有一个非常基本的问题,我无法找到任何信息。

比方说,我有一个有一个方法getStudents的实体。此方法可以返回ArrayCollectionPersistentCollection,都有来自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)?

collections doctrine-orm doctrine criteria
1个回答
0
投票

不知道其他的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[]作品,它可以帮助你在你的代码中的实际集和交集类型区分。

© www.soinside.com 2019 - 2024. All rights reserved.