PHP8.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函数结束它的执行

无效vs从不

  • void可以有return;never不能。
  • never强制函数抛出或以 exit/die 终止,但void不会。
  • never 是 PHP 类型系统中所有其他类型的子类型,包括 void(这允许返回类型协变)。
  • 两者都不允许返回值。
  • 两者都不能用作参数或属性类型。
  • 两者都不能用作箭头函数的返回类型。
  • 两者都只能用作独立类型(不允许并集或交集)。

当选择voidnever,反之亦然?

void当您期望 PHP 在函数调用后执行下一条语句时,您应该声明一个函数返回类型。并且您应该never在不期望 PHP 在该函数调用之后执行下一条语句时声明它。


以上是PHP8.1中的永不返回类型是什么的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>