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 中联合类型的一部分。我们主要使用 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 { // ... } } ?>