關因而否要在 PHP 8 中引入 Union Types 的投票已於近日結束,投票結果顯示有 61 名 PHP 開發組成員投了同意票,5 名投了反對票。php
還留意到鳥哥在投票中投了反對票~)函數
所以根據投票結果,官方已確認將會在 PHP 8 中引入 Union Types 2.0。學習
關於 Union Types 的具體討論可在 GitHub 查看,下面咱們來簡單瞭解一下 Union Types(聯合類型)。code
根據官方的介紹,Union Types(聯合類型)支持接收多個不一樣類型的值,而不單單是單一類型。PHP 目前已經支持兩種特殊的聯合類型:blog
Type
or null
,使用特殊的?Type
語法繼承
array
or Traversable
,使特殊的iterable
類型ip
不過 PHP 目前尚不支持任意的聯合類型。如要使用,需經過 phpdoc 註釋的幫助,示例以下:ci
根據數據統計的結果,在開源生態以及 PHP 自身的標準庫中使用聯合類型很是廣泛。官方表示,若是 PHP 能支持聯合類型,將會容許咱們將更多類型信息從 phpdoc 遷移至函數簽名,這具備如下常見的優勢:pdo
類型其實是強制執行的,所以能夠及早發現錯誤。開發
由於它們是強制性的,因此類型信息不太可能變得過期或遺漏邊緣狀況。
在繼承過程當中會檢查類型,以執行里氏替換原則(Liskov Substitution Principle)
可經過反射得到類型信息。
語法比 phpdoc 簡潔。
泛型以後,聯合類型能夠說是目前類型聲明系統中最大的「缺口」。
聯合類型使用 T1|T2|…
語法,可在全部接受的類型中使用:
支持的類型
聯合類型支持 PHP 當前支持的全部類型:空類型、可空聯合類型、false pseudo-type、重複和冗餘類型。
除特殊void
類型外,PHP 的類型語法如今能夠經過如下語法來描述: