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\ArrayCollection
class,其中returns:
return new static($filtered);
如您在文件 ArrayCollection.php
的第 385 行所见
这可能是 PHPStorm 推导出可能的 return 类型的地方。代码:
new static()
在 PHPStorm 看来 return 是一个静态 class 的新实例。可能不是正确的解释,但您应该了解自动化系统不一定知道以下两者之间的区别:
new someclass();
// and
new static();
我正在开发一个 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\ArrayCollection
class,其中returns:
return new static($filtered);
如您在文件 ArrayCollection.php
这可能是 PHPStorm 推导出可能的 return 类型的地方。代码:
new static()
在 PHPStorm 看来 return 是一个静态 class 的新实例。可能不是正确的解释,但您应该了解自动化系统不一定知道以下两者之间的区别:
new someclass();
// and
new static();