如何解决PHP 8.1 中的永不返回类型是什么
PHP 8.1 引入了 never
返回类型,它是什么? never
和 void
有什么区别?
解决方法
never
类型声明被引入用作函数的返回类型提示,这些函数从不具有隐式或显式的 return
语句。并且必须通过抛出异常或使用 exit/die
函数退出来终止。
function redirect(string $uri): never
{
header('Location: ' . $uri);
exit();
}
这里的 redirect
被称为永不返回的函数,因为:
1) 它没有明确定义的 return
语句。
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 致命错误:未捕获的类型错误:重定向():永不返回的函数不得隐式返回
3) 它以 exit
函数结束执行
无效与从不
-
void
可以有return;
,但never
不能。 -
never
强制函数抛出或以 exit/die 终止,但void
不会 不是。 -
never
是 PHP 类型系统中所有其他类型的子类型,包括 void(这允许返回类型协变)。 - 两者都不允许返回值。
- 两者都不能用作参数或属性类型。
- 两者都不能用作箭头函数的返回类型。
- 两者都只能用作独立类型(不允许并集或交集)。
何时选择 void
而不是 never
,反之亦然?
当您希望 PHP 在函数调用后执行下一条语句时,您应该声明一个函数返回类型 void
。并且您应该在不期望 PHP 在该函数调用之后执行下一条语句时声明它 never
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。