什么是PHP8.1中的永不返回类型

bpzcxfmw  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(484)

PHP8.1介绍 never 返回类型,是什么?两者的区别是什么 nevervoid ?

y53ybaqx

y53ybaqx1#

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致命错误:未捕获的typeerror:redirect():永不返回的函数不能隐式返回
3) 它以一个 exit 功能

虚无vs从不 void 可以 return; 但是 never 不能 never 强制函数抛出或以exit/die终止,但 void 没有。 never 是php类型系统中所有其他类型的子类型,包括void(这允许返回类型协变)。

两者都不允许返回值。
两者都不能用作参数或属性类型。
两者都只能用作独立类型(不允许并集或交集)。

什么时候选择虚无而不是从不,反之亦然?

您应该声明一个函数返回类型 void 当您希望php在函数调用后执行下一条语句时。你应该申报 never 不要期望php在该函数调用之后执行下一条语句。

相关问题