PHP 8 中的联合类型
使用 PHP 8 中的联合类型,我们可以使用两种或多种类型的值,而无需使用单一类型。要指定多种类型,请使用竖线 (|) 将它们连接起来。
联合类型支持参数、返回类型和属性。
语法
type1|type2|……|type_n
示例 1:联合类型
<?php
class Number
{
private int | float $num;
public function getNum():
float | int
{
return $this->num
}
public function setNum(float | int):
void
{
$this->num = $num;
}
}
?>
示例 2:使用联合类型的 PHP 8 程序
<?php
class Number{
private int|float $number;
public function setNumber(int|float $number): void {
$this->number = $number;
}
public function getNumber(): int|float {
return $this->number;
} #passing floats or integer values to the number object
}
$number = new Number();
$number->setNumber(5);
print_r($number->getNumber());
$number->setNumber(11.54);
print_r($number->getNumber());
?>
输出
511.54
联合类型中的可空类型
在 PHP 7.1 中,可空类型使用问号 ?type 表示。在 PHP 8 中,我们可以将可空类型声明为 type|null。例如:float|int|null,但不能将其声明为 ?float|int。
可空类型语法
type1|type2|null
我们不应该像 ?type1|type2 那样声明,因为这会导致歧义。
编译时错误检查 − 在 PHP 中,联合类型声明中不允许出现重复或冗余的类型。此检查将在编译时进行,无需自动加载类/接口。
不允许使用重复类型 − 在 PHP 中,我们不能声明重复的类型,例如 int|int,也不允许使用 int|?int。因为这会返回语法错误。"致命错误:重复类型…在…行中是多余的。"
不允许使用 void 类型 − 在 PHP 8 中,联合类型 void 不允许与任何其他类型组合。
示例
Function foo(): void|null{}
PHP 8 中的 False 类型
False 类型是 PHP 8 中 Union 类型的一部分。我们通常使用 null 作为返回值来表示没有返回值或发生错误。例如:假设我们有一个类方法,它通过学生 ID 查找学生。如果学生 ID 不存在,它可能会返回 null 来表示学生 ID 不存在。但是,如果未找到 学生 ID,PHP 会使用 false。
False 类型用于表示任何失败,而不是 null 类型。
我们不能将 false 用作独立类型,也不允许使用可空的独立类型。这意味着我们不能使用 false、false|null 和 ?false。
我们可以在任何接受类型的场合使用 false,例如参数、属性和返回值。
它没有真正的字面量类型,我们只能使用 bool 类型。
示例
<?php
Class Student {
public function find(int $id): User|false
{
// ...
}
}
?>

