首頁  >  文章  >  PHP即將引入Union Types,投票已通過!

PHP即將引入Union Types,投票已通過!

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼轉載
2019-11-15 17:58:324407瀏覽

PHP即將引入Union Types,投票已通過!

關於是否要在 PHP 8 中引入 Union Types 的投票已於近日結束,投票結果顯示有 61 名 PHP 開發組成員投了贊成票,5 名投了反對票。

PHP即將引入Union Types,投票已通過!

PHP即將引入Union Types,投票已通過!

也留意到鳥哥在投票中投了反對票~

因此根據投票結果,官方已確認將會在PHP 8 中引入Union Types 2.0。

PHP即將引入Union Types,投票已通過!

關於 Union Types 的具體討論可在 GitHub 查看,我們來簡單了解一下 Union Types(聯合類型)。

根據官方的介紹,Union Types(聯合類型)支援接收多個不同類型的值,而不僅僅是單一類型。 PHP 目前已經支援兩種特殊的聯合型別:

    ·Type or null,使用特殊的Type語法

# #    ·

array or Traversable,讓特殊的iterable型別

不過PHP 目前尚未支援任意的組合型別。如要使用,需透過 phpdoc 註解的協助,範例如下:

<pre style="margin: 0px; padding: 0px; font-family: "Courier New" !important; font-size: 14px; line-height: 
1.5em; white-space: pre-wrap; overflow-wrap: break-word;">class Number { /**
* @var int|float number; /**
* @param int|float number) { number;
} /**
* @return int|float */
public function getNumber () { return $this->number;
}
}
根據

資料統計的結果

,在開源生態以及 PHP 本身的標準函式庫中使用聯合型別非常普遍。官方表示,如果PHP 能支援聯合類型,將會允許我們將更多類型資訊從phpdoc 遷移至函數簽名,這具有以下常見的優點:    ·

類型實際上是強制執行的,因此可以及早發現錯誤。     ·

因為它們是強制性的,所以類型資訊不太可能變得過時或遺漏邊緣情況。     ·

在繼承過程中會檢查類型,以執行里氏替換原則(Liskov Substitution Principle)# ·

可透過反射獲得型別資訊。     ·

文法比 phpdoc 簡潔。

泛型之後,聯合類型可以說是目前類型宣告系統中最大的「缺口」。

****提案****

聯合類型使用T1T2… 語法,可在所有接受的類型中使用:

<pre style="margin: 0px; padding: 0px; font-family: "Courier New" !important; font-size: 14px; line-height: 
1.5em; white-space: pre-wrap; overflow-wrap: break-word;">class Number { private int|float number): void { number;
} public function getNumber (): int|float { return $this->number;
}
}

支援的類型

聯合類型支援PHP 目前支援的所有類型:空白類型、可空聯合類型、false pseudo-type、重複和冗餘類型。

****類型語法****

除特殊void類型外,PHP 的類型語法現在可以透過以下語法來描述:

<pre style="margin: 0px; padding: 0px; font-family: "Courier New" !important; font-size: 14px; line-height: 
1.5em; white-space: pre-wrap; overflow-wrap: break-word;">type: simple_type | "?" simple_type | union_type
;
union_type: simple_type "|" simple_type | union_type "|" simple_type
;
simple_type: "false" # only legal in unions
| "null" # only legal in unions
| "bool"
| "int"
| "float"
| "string"
| "array"
| "object"
| "iterable"
| "callable" # not legal in property types
| "self"
| "parent"
| namespaced_name
;
1 0PHP中文網,大量的免費

PHP入門教程###,歡迎線上學習! ###
陳述:
本文轉載於:jianshu.com。如有侵權,請聯絡admin@php.cn刪除