On this page

PHP Mixed/Void/Never/相对类/literal

Mixed

mixed 类型接受每个值。等同于联合类型 object|resource|array|string|float|int|bool|null。自 PHP 8.0.0 起可用。

在类型理论中,mixed 是顶级类型。这意味着其它所有类型都是它的子类型。


Void

void 是仅用于返回类型,表示函数不返回值,但该函数仍可能会终止。因此,它不能成为联合类型声明的一部分。自 PHP 7.1.0 起可用。

>注意: 即使函数的返回类型是 void,但仍然可以返回值,但值只能始终为 null


Never

never 是仅用于返回的类型,表示函数不会终止。这意味着它要么调用 exit(),要么抛出异常,要么无限循环。因此,它不能是联合类型声明的一部分。自 PHP 8.1.0 起可用。

never 是类型理论中的最底层类型。这意味着它是其它所有类型的子类型,并在可以在继承期间替换其它任何返回类型。


<?php

function sayHello(string $name): never
{
    echo "Hello, $name";
    exit(); // if we comment this line, php throws fatal error
}

sayHello("John"); // result: "Hello, John"

相对类类型

这些类型声明只能在类中使用。

self

The value must be an instanceof the same class as the one in which the type declaration is used.

parent

值必须是 instanceof 使用了类型声明的父级类。

static

static is a return-only type which requires that the value returned must be an instanceof the same class as the one the method is called in. 自 PHP 8.0.0 起可用。

literal 类型

literal 类型是那些不仅检查值,而且也检查值本身的类型。PHP 支持两种 literal 类型:false(自 PHP 8.0.0 起支持),true(自 PHP 8.2.0 起支持)。

警告

在 PHP 8.2.0 之前,false 类型只能用作联合类型的一部分。

注意: 无法定义自定义 literal 类型。建议改用枚举

Iterable 可迭代对象

Iterable 是内置编译时 array|Traversable 的类型别名。从 PHP 7.1.0 到 PHP 8.2.0 之间的描述来看,iterable 是内置伪类型,充当上述类型别名,也可以用于类型声明。iterable 类型可用于 foreach 或在生成器中使用 yield from

>注意: 将可迭代对象声明为返回类型的函数也可能是 生成器

**示例 #1

 可迭代生成器返回类型的示例
**
<?php
function gen(): iterable {
    yield 1;
    yield 2;
    yield 3;
}
?>