什么是PHPDoc"静态"返回类型在这里表示?

时间:2015-01-28 14:50:46

标签: php symfony doctrine-orm phpstorm phpdoc

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

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由Doctrine自动生成。 getAppointmentsAtDate方法由我自己实现。该方法的PHPDoc标头由PhpStorm自动生成。

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

根据我对PHPDoc types static的理解,表示此方法返回调用它的类的实例,在本例中为User实例。

但是,我没有看到此方法如何返回User实例或Collection实例以外的任何内容。

那么static关键字在这里意味着什么?我对关键字的理解是否有缺陷?或者PhpStorm的自动生成的文档标题是错误的?

3 个答案:

答案 0 :(得分:7)

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

return new static($filtered);

Phpstorm可能解析了doctrine源并在匹配函数中看到了返回静态语句。

答案 1 :(得分:2)

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

您的代码:

return $allAppointments ->matching($criteria);

Doctrine\Common\Collections\ArrayCollection类返回匹配函数的结果,该类返回:

return new static($filtered);

如第385行所示,文件ArrayCollection.php

这可能是PHPStorm推断出可能的返回类型的地方。守则:

new static()

PHPStorm似乎会返回一个静态类的新实例。可能不是正确的解释,但你应该看到自动化系统不一定知道它们之间的区别:

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

答案 2 :(得分:0)

您对静态关键字的理解听起来是正确的。 matching方法的PHPDoc表示返回Collection。对我来说就像PhpStorm犯了一个错误。也许你在代码生成后对代码进行了一些更改?