2011-08-04 74 views
30

我有一個方法返回當前對象,我如何記錄這個?我應該使用@return self,這個還是當前的課程?

/** 
* set something 
* 
* @return this 
*/ 
public function setSomething(){ 
      // ... 
    return $this; 
} 

或者我應該做@return self@return Current_Class_Name

+3

相關,for static:http://stackoverflow.com/questions/5858031/php doc-and-late-static-or-dynamic-binding – Greg

回答

26

@return Current_Class_Name肯定會工作,我更喜歡。

@return self也可以在某些程序中正常工作。

@return this不好,因爲這不是一個typename。

+1

「return Current_Class_Name」目前效果最好,因爲它可以讓IDE自動完成。 在phpDocumentor [1]和Eclipse PDT [2]中有功能請求來識別「return $ this」。 [1] - http://pear.php.net/bugs/bug.php?id=16223 [2] - https://bugs.eclipse.org/bugs/show_bug.cgi?id= 276082 – ashnazg

+2

PhpStorm確實支持'@return self' – sarunast

+3

如果我想返回子類而不是我寫該方法的基類,該怎麼辦? –

5
/** 
* set something 
* 
* @return self 
*/ 
public function setSomething(){ 
      // ... 
    return $this; 
} 

您可以使用 「自我」 類型@param或@return ..

PHPDoc的建議 '自我' 是指在對象自我..

來源:http://www.phpdoc.org/docs/latest/references/phpdoc/types.html

+0

這適用於子類很差。如果子類不覆蓋它,解釋器不知道具有相同子類的對象必須被返回。 – SOFe

28

有一個PHP Standards Recommendation (PSR)目前在草案(PSR-5) that proposes@return $這個是用來表示相同的實例返回。

$ this,此類型所應用的元素與給定上下文中的當前類相同。因此,這種類型是更嚴格的靜態版本,此外,返回的實例不僅必須是相同的類,而且也是相同的實例。

此類型通常用作實現Fluent接口設計模式的方法的返回值。

目前流行的IDE如PhpStorm和Netbeans使用這種表示法。

+3

你的回答是誤導性的,因爲它聽起來像這個PSR建議'$ this'。我不認爲這是真的。它只是*允許*,就像'Current_Class_Name'和'self'一樣。 – marcv

+0

還要注意,它是'@return $ this'而不是'@return this'作爲問題。 – SOFe

+0

我使用PHP風暴和$這個攪得它,而自我和\類不 –

3

這個問題很舊,但我只想分享給大家!

至少對於使用的NetBeans 8.1的那些..這個符號讓代碼自動完成的IDE很好地工作

/** 
* Method that returns $this instance (using late state binding) 
* @return static 
*/ 
public function iWillReturnMyself () { 
    return $this; 
} 

我說至少爲NetBeans8.1用戶,但可能在舊版本和/或其他IDE上工作 =]

+0

netbeans 8.2作品也 – Tebe

相關問題