PHPSorm:对象集合的PHPDoc是否正确?

sz81bmfz  于 2022-12-21  发布在  PHP
关注(0)|答案(3)|浏览(156)

我正在使用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() { ... }
qzlgjiam

qzlgjiam1#

您可以将它们(两种类型)组合在一起。在某些情况下可能不理想,但可以工作,您可能会认为它比通过@var PHPDoc注解手动指定类型更好。

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

2ledvvac2#

从2021.2开始的Phpstorm允许以下语法:

/**
     * @return Collection<Order>
     */

这适用于Doctrine集合-以及从Laravel 9开始的所有Laravel集合(L 8中不存在所需的注解)。
截图来自PhpStorm 2021.2最新动态:

ocebsuys

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

相关问题