微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP 8.1 中的永不返回类型是什么

如何解决PHP 8.1 中的永不返回类型是什么

PHP 8.1 引入了 never 返回类型,它是什么? nevervoid 有什么区别?

解决方法

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 举报,一经查实,本站将立刻删除。