2

有什么理由让我的 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 { }
4

3 回答 3

4

你必须像这样覆盖你的方法标签作为评论

/**
 * @method Student setName($name)
 */
class Student extends Person { }
于 2012-11-26T10:49:53.667 回答
4

您可以在文档块中返回 $this 而不是 person

于 2014-03-19T08:16:57.050 回答
0

根据我的经验,我发现使用组合方法很有帮助。我的 IDE(带有 PHP 插件的 IntelliJ IDEA)抱怨说,$this当稍后将该值用作另一个方法调用的参数时,我的 fluent 方法正在返回。通过将 PHPDoc 注释更改为:

/**
 * @param string $name
 * @return $this|Person
 */

IDE 更快乐,PHPDoc 为用户提供了更多信息。

顺便说一句,通过说方法$this在 PHPDoc 中返回,这很好地表明该方法正在实现一个流畅的接口。说它返回Person,虽然在技术上是准确的,但并不一定表示流畅。例如,创建一个 Person对象并返回它的方法也可以使用相同的注释,但它不会很流畅。

于 2015-05-20T12:49:46.833 回答