簡體   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