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

更新于:2021年4月1日

715 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告