2012-01-05 60 views
26

函數是否應該返回null應該使用一個函數:return null;?

E.g.

function test() 
{ 
    return null; // vs return; 
} 

後者被認爲是不好的做法還是無關緊要?

PS

不管是不好的做法不應該是主觀的恕我直言。

+0

如果您有這表明'null'值意味着一些具體的事情,的做法,即函數的參數包含錯誤的數據 - 然後繼續。但是,布爾返回通常綽綽有餘。我在匿名函數中使用'null'來期望返回實際數據,所以boolean'false'被認爲是可接受的返回值,但是'null'不是。 – ashein 2012-01-05 20:17:51

+1

我們可以得出結論,它是多餘的,因爲運行時已經這樣做了。但是這並不會使它變得糟糕或無用。答案是明確的。更有趣的是,你不應該寫'NULL'嗎? – mario 2012-01-05 20:19:08

+0

@mario你的意思是'null'與'NULL'? – PeeHaa 2012-01-05 20:20:02

回答

18

如果您不返回任何內容,只需使用return;或者在函數結束時完全省略它。
如果您的功能通常會返回某些內容,但由於某種原因,請不要使用return null;

這與您的操作方式類似,例如在C中:如果你的函數沒有返回任何東西,它是void,否則它通常會返回一個有效的指針或NULL。

+2

這對PHP有什麼影響? PHP不是C. PHP中沒有返回值與'NULL'完全相同,沒有void變量類型。 – hakre 2012-01-05 20:19:18

+2

確實如此,但更清楚的是返回值可能會被調用者使用。 – ThiefMaster 2012-01-05 20:21:25

+0

除非沒有任何文檔,否則我很難說。你先讀什麼?函數體的最後一行或返回類型文檔就在它的頭部? – hakre 2012-01-05 20:22:44

38

總是一個很好的習慣來展示你回來的東西。

但作爲一個尖,下面都是等效的:

function test() 
{ 
    return null; 
} 


function test() 
{ 
    return; 
} 


function test() 
{ 

} 

在所有情況下對var_dump(test());是:

NULL 
+9

第一句話+1。 :) – Herbert 2012-01-05 20:21:18

+7

最後一個函數示例非常清楚,沒有什麼可返回的。那麼哪個例子在你的眼中顯示得最好? – hakre 2012-01-05 20:24:02

+2

正如第一條評論...總是一個很好的習慣來展示你回來的東西。所以我的選擇是第一個。 – devdRew 2012-01-05 20:28:17

6

PHP中的未定義的函數的返回值總是等於NULL,所以它沒有任何區別(運行時會這樣做)。

有什麼不同之處在於,您可以使用docblocks並記錄@return標籤的返回值,以便在此處提供巧妙的IDE提供信息。

如果你想每不是,返回值是預期的docblock信號,您可以使用void

* @return void 

如果你想發出信號返回NULL意,您可以使用nullNULL (取決於你的代碼風格的大寫PHP標準常量):

* @return null 

或:

* @return NULL 

這應該使編碼人員的意圖可見,如通過PHP這總是null作爲事實返回值。

往下看:

更多細節及更新的信息in PeeHaa's answer to this same question

0

從語義上講,我不認爲兩者有區別。按照PHP documentation on return

如果沒有提供任何參數,那麼括號必須被省略 將返回NULL。

我個人喜歡把NULL放在那裏。那麼返回什麼是沒有問題的,這使得您的調試變得更容易一些。

+0

但是,「毫無疑問」是什麼被返回只是'回來;'... – 2012-01-05 20:35:19

+0

這是真的。我想,我只是喜歡冗長。當我從現在開始,在深夜研究我的代碼時,試圖弄清楚什麼是壞的,我喜歡把所有東西都放在我面前(沒有任何暗示)。個人喜好。 – 2012-01-05 21:04:01

5

這實在是太傻返回null如果有什麼返回。做return;顯示沒有實際返回任何東西的意圖。並明確了該功能的功能。

PHP沒有void返回類型的事實不應該成爲讓人不清楚的原因。還要注意的是PHP 7.1將提供支持the void return type

function test(): void { 
    return null; // this will error 
} 
相關問題