函数应该返回null吗?
例如
function test()
{
return null; // vs return;
}
Run Code Online (Sandbox Code Playgroud)
后者被认为是不良做法还是不重要?
PS
是否是不好的做法不应该是主观的恕我直言.
dev*_*Rew 47
总是一个很好的做法来展示你的回归.
但作为提示,以下内容都是等效的:
function test()
{
return null;
}
function test()
{
return;
}
function test()
{
}
Run Code Online (Sandbox Code Playgroud)
在所有情况下,var_dump(test());将有:
NULL
Run Code Online (Sandbox Code Playgroud)
Thi*_*ter 26
如果您没有返回任何内容,只需return;在函数末尾使用或省略它.
如果你的功能通常会返回一些但不是出于某种原因,那return null;就是要走的路.
这与你如何做它类似,例如在C中:如果你的函数不返回东西,那么void它通常会返回一个有效的指针或NULL.
PHP中未定义的函数返回值总是等于NULL,因此它没有任何区别(运行时执行此操作).
有什么区别的是你使用docblocks并使用@return标签记录返回值,这里有聪明的IDE提供信息.
如果您希望根据文档块发出信号,表示未返回值,则可以使用void:
* @return void
Run Code Online (Sandbox Code Playgroud)
如果您想要发出返回的信号,NULL可以使用null或NULL(取决于代码样式的大写PHP标准常量):
* @return null
Run Code Online (Sandbox Code Playgroud)
要么:
* @return NULL
Run Code Online (Sandbox Code Playgroud)
这应该使编码器意图可见,因为PHP将始终null作为事实返回值.
继续阅读:
更多细节和更新信息在PeeHaa对同一问题的回答中.
null如果没有什么可以归还的话,回归真是太愚蠢了.做return;表演意图不实际返回任何东西.并明确了该功能的作用.
PHP没有void返回类型这一事实不应成为使意图不那么明确的理由.还要注意的是PHP 7.1将提供支持的void返回类型:
function test(): void {
return null; // this will error
}
Run Code Online (Sandbox Code Playgroud)
当您使用带有可为空前缀“?”的返回类型声明时 它们是有区别的!
PHP 文档说...
从 PHP 7.1.0 开始,可以通过在类型名称前加上问号 (?) 来将返回值标记为可为空。这表示该函数返回指定类型或 NULL。
因此,当您不返回任何内容时,错误消息将是:
Fatal error: Uncaught TypeError: Return value of test() must be of the type string or null, none returned in ...
当您返回return;错误消息时,将是:
Fatal error: A function with return type must return a value (did you mean "return null;" instead of "return;"?) in ...
当你回来时null,一切都很好。