PHPDoc "static" return 类型在这里表示什么?

What does PHPDoc "static" return type signify here?

我正在开发一个 Symfony 项目,其中的实体由 Doctrine 管理。以下是我实体的代码:

class User {
    /**
     * @ORM\OneToMany(targetEntity="Appointment", mappedBy="user")
     */
    private $appointments;

    /**
     * Get appointments
     *
     * @return \Doctrine\Common\Collections\ArrayCollection
     */
    public function getAppointments()
    {
        return $this->appointments;
    }

    /**
     * Get appointments at a specified date
     *
     * @param \DateTime $date
     * @return \Doctrine\Common\Collections\Collection|static
     */
    public function getAppointmentsAtDate(\DateTime $date) {
        $allAppointments = $this->getAppointments();

        $criteria = Criteria::create()->where(/* some clever filtering logic goes here */);

        return $allAppointments ->matching($criteria);
    }
}
根据学说,

getAppointments 是 auto-generated。 getAppointmentsAtDate方法是我自己实现的。该方法的 PHPDoc header 由 PhpStorm auto-generated。

我无法理解的是自定义方法的 return 类型中的 static 关键字。

根据我对 PHPDoc types static 的理解,此方法 return 是调用它的 class 的实例,在本例中为 User实例.

但是,我看不出这个方法怎么能 return 一个 User 实例或除 Collection.

实例之外的任何东西

那么这里的static关键字是什么意思呢?我对关键字的理解有缺陷吗?或者 PhpStorm 的 auto-generated 文档 header 完全错误?

您对 static 关键字的理解听起来是正确的。 matching 方法的 PHPDoc 说它 returns Collection。在我看来,PhpStorm 犯了一个错误。也许您在生成代码后对代码进行了一些更改?

我查看了 matching function 的学说来源,这里是 return 类型:

return new static($filtered);

Phpstorm大概解析了doctrine源码,看到了匹配函数中的return静态语句

您对 static 关键字的理解是正确的。

您的代码:

return $allAppointments ->matching($criteria);

Returns匹配函数的结果,来自Doctrine\Common\Collections\ArrayCollectionclass,其中returns:

return new static($filtered);

如您在文件 ArrayCollection.php

的第 385 行所见

这可能是 PHPStorm 推导出可能的 return 类型的地方。代码:

new static()

在 PHPStorm 看来 return 是一个静态 class 的新实例。可能不是正确的解释,但您应该了解自动化系统不一定知道以下两者之间的区别:

new someclass();
// and
new static();