考虑一个显式返回的函数null:
function nullreturn() {return null;}
$rv = nullreturn();
var_dump($rv);
var_dump(isset($rv));
var_dump(is_null($rv));
Run Code Online (Sandbox Code Playgroud)
其中标识为null- 如预期的那样.
NULL
bool(false)
bool(true)
Run Code Online (Sandbox Code Playgroud)
并考虑一个没有返回值的函数 - 甚至是一个return声明:
function noreturn() {}
$rv = noreturn();
var_dump($rv);
var_dump(isset($rv));
var_dump(is_null($rv));
Run Code Online (Sandbox Code Playgroud)
其中也标识为null:
NULL
bool(false)
bool(true)
Run Code Online (Sandbox Code Playgroud)
...有没有办法确定noreturn返回"没有"而不是null?
至于为什么我需要这个null/ void区别,我一直在努力实现与先前的服务实现的兼容性,该实现确实做出了这种区分并且包括对它的测试.但是,它可能并不重要.我只是不想剥离相关的测试,并希望如果我忽略了可实现的解决方案,我不会依赖于这种区别.
不.没有返回,返回NULL,是完全相同的事情.没有返回值的函数会隐式返回NULL.这适用于多种语言.对不起,如果这不是您正在寻找的答案,但这是现实.
以下各项完全相同:
function A() {
return;
}
function B() {
return NULL;
}
function C() {
}
Run Code Online (Sandbox Code Playgroud)
另见returnPHP手册:
注意:如果未提供参数,则必须省略括号并返回NULL.使用括号调用return但没有参数将导致解析错误.