函數是否應該返回null
?應該使用一個函數:return null;?
E.g.
function test()
{
return null; // vs return;
}
後者被認爲是不好的做法還是無關緊要?
PS
不管是不好的做法不應該是主觀的恕我直言。
函數是否應該返回null
?應該使用一個函數:return null;?
E.g.
function test()
{
return null; // vs return;
}
後者被認爲是不好的做法還是無關緊要?
PS
不管是不好的做法不應該是主觀的恕我直言。
如果您不返回任何內容,只需使用return;
或者在函數結束時完全省略它。
如果您的功能通常會返回某些內容,但由於某種原因,請不要使用return null;
。
這與您的操作方式類似,例如在C中:如果你的函數沒有返回任何東西,它是void
,否則它通常會返回一個有效的指針或NULL。
這對PHP有什麼影響? PHP不是C. PHP中沒有返回值與'NULL'完全相同,沒有void變量類型。 – hakre 2012-01-05 20:19:18
確實如此,但更清楚的是返回值可能會被調用者使用。 – ThiefMaster 2012-01-05 20:21:25
除非沒有任何文檔,否則我很難說。你先讀什麼?函數體的最後一行或返回類型文檔就在它的頭部? – hakre 2012-01-05 20:22:44
總是一個很好的習慣來展示你回來的東西。
但作爲一個尖,下面都是等效的:
function test()
{
return null;
}
function test()
{
return;
}
function test()
{
}
在所有情況下對var_dump(test());
是:
NULL
PHP中的未定義的函數的返回值總是等於NULL
,所以它沒有任何區別(運行時會這樣做)。
有什麼不同之處在於,您可以使用docblocks並記錄@return
標籤的返回值,以便在此處提供巧妙的IDE提供信息。
如果你想每不是,返回值是預期的docblock信號,您可以使用void
:
* @return void
如果你想發出信號返回NULL
意,您可以使用null
或NULL
(取決於你的代碼風格的大寫PHP標準常量):
* @return null
或:
* @return NULL
這應該使編碼人員的意圖可見,如通過PHP這總是null
作爲事實返回值。
往下看:
更多細節及更新的信息in PeeHaa's answer to this same question。
從語義上講,我不認爲兩者有區別。按照PHP documentation on return:
如果沒有提供任何參數,那麼括號必須被省略 將返回NULL。
我個人喜歡把NULL放在那裏。那麼返回什麼是沒有問題的,這使得您的調試變得更容易一些。
但是,「毫無疑問」是什麼被返回只是'回來;'... – 2012-01-05 20:35:19
這是真的。我想,我只是喜歡冗長。當我從現在開始,在深夜研究我的代碼時,試圖弄清楚什麼是壞的,我喜歡把所有東西都放在我面前(沒有任何暗示)。個人喜好。 – 2012-01-05 21:04:01
PEAR最佳實踐頁面在其「Return early」示例中執行return null
。這增加了我們應該始終努力做到的可讀性,因爲我們爲人類而不是計算機編寫代碼。
來源:http://pear.php.net/manual/en/standards.bestpractices.php
這實在是太傻返回null
如果有什麼返回。做return;
顯示沒有實際返回任何東西的意圖。並明確了該功能的功能。
PHP沒有void
返回類型的事實不應該成爲讓人不清楚的原因。還要注意的是PHP 7.1將提供支持the void
return type:
function test(): void {
return null; // this will error
}
如果您有這表明'null'值意味着一些具體的事情,的做法,即函數的參數包含錯誤的數據 - 然後繼續。但是,布爾返回通常綽綽有餘。我在匿名函數中使用'null'來期望返回實際數據,所以boolean'false'被認爲是可接受的返回值,但是'null'不是。 – ashein 2012-01-05 20:17:51
我們可以得出結論,它是多餘的,因爲運行時已經這樣做了。但是這並不會使它變得糟糕或無用。答案是明確的。更有趣的是,你不應該寫'NULL'嗎? – mario 2012-01-05 20:19:08
@mario你的意思是'null'與'NULL'? – PeeHaa 2012-01-05 20:20:02