繁体   English   中英

PHPDoc用于子类中的流畅接口?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM