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
vsNULL
?@PeeHaa:是的,我相信大写的变体是规范的标记。回到明确性,它有更大的公告效果。在这里写返回不是更明确吗?是的,但这样更清楚的是,返回值可能会被调用方使用。除非没有任何文档,否则我觉得很难说。你先读什么?函数体的最后一行或返回类型仅在其头部?不是每个项目都使用文档注释。不是每个函数都返回某些内容。或者这里的代码应该清楚地说明对于不说这种语言的人将返回NULL吗?好的,我看到答案改变了,所以我认为它是清楚的。最后一个函数示例非常清楚,没有什么可以返回。那么,哪一个例子在你眼中表现得最好呢。。。总是一个很好的实践来展示你的回报。因此,我的选择是第一个。首先,你显示你返回了一些东西,然后完成句子,说一些东西是NULL
,而不是制造更少的单词,因此陈述明显的内容?对于语义有意义的编程,我将采用以下方法:$foo=NULL;打印$foo;不会抛出错误,但会打印$foo;威尔,没错。我想我只是喜欢长篇大论。当我在一年后的深夜查看我的代码,试图找出什么是坏的,我喜欢所有的东西都在我面前(没有任何暗示)。个人偏好。
* @return void
* @return null
* @return NULL
function test(): void {
return null; // this will error
}