[英]PHPDoc for fluent interface in subclass?
是否有任何原因让我的IDE(实际上是PHPStorm)理解:
$student->setName('Marco');
将返回Student
的实例,而不重新定义子类中的setName()
(仅用于添加PHPDoc注释)?
class Person
{
private $name;
/**
* @param string $name
* @return Person
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
}
class Student extends Person { }
你必须像这样的评论覆盖你的方法标签
/**
* @method Student setName($name)
*/
class Student extends Person { }
您可以在docblock中返回$ this而不是person
根据我的经验,我发现使用组合方法很有帮助。 我的IDE(带有PHP插件的IntelliJ IDEA)抱怨我的流畅方法在以后将该值用作另一个方法调用的参数时返回$this
。 通过将PHPDoc注释更改为:
/**
* @param string $name
* @return $this|Person
*/
IDE更快乐,PHPDoc为用户提供更多信息。
顺便提一下,通过说该方法在PHPDoc中返回$this
,这是一个很好的指示,该方法正在实现一个流畅的接口。 说它返回Person
,虽然技术上准确,但并不一定表示流畅。 例如,创建新 Person
对象并返回它的方法也可以使用相同的注释,但它不会流畅。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.