PHP 8 中的联合类型

phpserver side programmingprogramming更新于 2025/9/15 11:07:17

使用 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
      {
         // ...
      }
   }
?>

相关文章