PHP8.1介绍 never 返回类型,是什么?两者的区别是什么 never 及 void ?
never
void
y53ybaqx1#
never 引入类型声明,作为从未使用过的函数的返回类型提示 return 既不含蓄也不明确的陈述。必须通过引发异常或使用退出来终止 exit/die 功能。
return
exit/die
function redirect(string $uri): never { header('Location: ' . $uri); exit(); }
在这里 redirect 被称为永不返回函数,因为:1) 它没有 return 明确定义的语句。
redirect
function redirect(string $uri): never { exit(); return 'something'; }
将提示:php致命错误:永不返回的函数不能返回2) 它没有 return 隐式定义的语句。
function redirect(string $uri): never { if (false) { header('Location: ' . $uri); exit(); } }
因为这里的条件永远不会满足,所以执行会跳过if语句并返回隐式语句 NULL 这将导致:php致命错误:未捕获的typeerror:redirect():永不返回的函数不能隐式返回3) 它以一个 exit 功能
NULL
exit
return;
两者都不允许返回值。两者都不能用作参数或属性类型。两者都只能用作独立类型(不允许并集或交集)。
您应该声明一个函数返回类型 void 当您希望php在函数调用后执行下一条语句时。你应该申报 never 不要期望php在该函数调用之后执行下一条语句。
1条答案
按热度按时间y53ybaqx1#
never
引入类型声明,作为从未使用过的函数的返回类型提示return
既不含蓄也不明确的陈述。必须通过引发异常或使用退出来终止exit/die
功能。在这里
redirect
被称为永不返回函数,因为:1) 它没有
return
明确定义的语句。将提示:
php致命错误:永不返回的函数不能返回
2) 它没有
return
隐式定义的语句。因为这里的条件永远不会满足,所以执行会跳过if语句并返回隐式语句
NULL
这将导致:php致命错误:未捕获的typeerror:redirect():永不返回的函数不能隐式返回
3) 它以一个
exit
功能虚无vs从不
void
可以return;
但是never
不能never
强制函数抛出或以exit/die终止,但void
没有。never
是php类型系统中所有其他类型的子类型,包括void(这允许返回类型协变)。两者都不允许返回值。
两者都不能用作参数或属性类型。
两者都只能用作独立类型(不允许并集或交集)。
什么时候选择虚无而不是从不,反之亦然?
您应该声明一个函数返回类型
void
当您希望php在函数调用后执行下一条语句时。你应该申报never
不要期望php在该函数调用之后执行下一条语句。