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 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.