Php 函数是否应该使用:returnnull;?

Php 函数是否应该使用:returnnull;?,php,Php,函数是否应返回null 例如 后者被认为是坏习惯还是无关紧要 PS 不应该主观判断它是否是坏习惯。如果您不返回任何内容,只需使用return或在函数末尾完全忽略它。 如果您的函数通常返回一些东西,但由于某种原因没有返回,则返回null是一条路要走 这类似于您在C中的操作方式:如果您的函数不返回内容,则它是void,否则它通常返回有效指针或NULL。显示您返回的内容始终是一个好的做法 但作为提示,以下内容都是等效的: function test() { return null; } f

函数是否应返回
null

例如

后者被认为是坏习惯还是无关紧要

PS


不应该主观判断它是否是坏习惯。

如果您不返回任何内容,只需使用
return或在函数末尾完全忽略它。
如果您的函数通常返回一些东西,但由于某种原因没有返回,则
返回null是一条路要走


这类似于您在C中的操作方式:如果您的函数不返回内容,则它是
void
,否则它通常返回有效指针或NULL。

显示您返回的内容始终是一个好的做法

但作为提示,以下内容都是等效的:

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标准常量的代码样式):

或:

这将使编码人员的意图在PHP中可见,这将始终是
null
作为实际返回值

继续阅读:


更多的细节和更新的信息是。

从语义上讲,我认为两者没有区别。根据报告:

如果未提供参数,则必须省略括号并 将返回NULL


我个人喜欢把空值放在那里。那么,返回的内容是毫无疑问的,这使得调试变得更加容易。

PEAR最佳实践页面在其“尽早返回”示例中执行了一个
返回null
。这增加了可读性,我们应该一直尝试这样做,因为我们为人类而不是计算机编写代码


来源:

如果没有任何可返回的内容,那么返回
null
显然是愚蠢的。做
返回显示不实际返回任何内容的意图。并明确了该函数的作用

PHP没有
void
返回类型这一事实不应该成为不太清楚意图的理由。还请注意,PHP 7.1将提供以下支持:

如果将与可为空的前缀“?”一起使用,则会有所不同

PHP文档说

从PHP7.1.0开始,返回值可以通过在类型名称前面加问号(?)标记为可为空。这表示函数返回指定的类型或NULL

因此,当您不返回任何内容时,错误消息将是:

致命错误:未捕获的TypeError:test()的返回值必须是字符串类型或null,在…(中未返回任何值)

当您返回时
返回错误消息将是:

致命错误:返回类型为的函数必须在…中返回值(您的意思是“return null;”而不是“return;”?)

返回
null
时,一切正常


请参见

如果您有一种习惯,表明
null
值表示特定的内容,即函数参数包含错误数据,请继续。但通常布尔返回就足够了。我在预期返回实际数据的匿名函数中使用了
null
,因此布尔
false
被认为是可接受的返回,但
null
不是。我们可以得出结论,它是冗余的,因为运行时已经这样做了。但这并不意味着它是坏的或无用的。答案是明确。更有趣的是,你不应该写
NULL
?@mario你的意思是
NULL
vs
NULL
?@PeeHaa:是的,我相信大写的变体是规范的标记。回到明确性,它有更大的公告效果。在这里写返回不是更明确吗?是的,但这样更清楚的是,返回值可能会被调用方使用。除非没有任何文档,否则我觉得很难说。你先读什么?函数体的最后一行或返回类型仅在其头部?不是每个项目都使用文档注释。不是每个函数都返回某些内容。或者这里的代码应该清楚地说明对于不说这种语言的人将返回NULL吗?好的,我看到答案改变了,所以我认为它是清楚的。最后一个函数示例非常清楚,没有什么可以返回。那么,哪一个例子在你眼中表现得最好呢。。。总是一个很好的实践来展示你的回报。因此,我的选择是第一个。首先,你显示你返回了一些东西,然后完成句子,说一些东西是
NULL
,而不是制造更少的单词,因此陈述明显的内容?对于语义有意义的编程,我将采用以下方法:$foo=NULL;打印$foo;不会抛出错误,但会打印$foo;威尔,没错。我想我只是喜欢长篇大论。当我在一年后的深夜查看我的代码,试图找出什么是坏的,我喜欢所有的东西都在我面前(没有任何暗示)。个人偏好。
 * @return void
 * @return null
 * @return NULL
function test(): void {
    return null; // this will error
}