首頁 >頭條 > 正文

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

轉載2019-11-15 17:58:3211824
phpStudy Linux 面板(小皮面板)

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

1573811002163535.png

1573811017304062.png

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

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

1573811032845509.png

關于 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;
}
}</pre>

根據數據統計的結果,在開源生態以及 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;
}
}</pre>

支持的類型

聯合類型支持 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
;</pre>
1
0

PHP中文網,大量的免費PHP入門教程,歡迎在線學習!

php中文網最新課程二維碼
  • 相關標簽:PHP Union Types
  • 本文轉載于:簡書,如有侵犯,請聯系[email protected]刪除
  • 相關文章

    相關視頻


    網友評論

    文明上網理性發言,請遵守 新聞評論服務協議

    我要評論條評論
    Suntxu
  • Suntxu· 2019-11-18 09:15:041樓
  • 消滅0評1隊

  • 專題推薦

    推薦視頻教程
  • PHP語言經典入門教程(2018)PHP語言經典入門教程(2018)
  • [公益直播]PHP實戰開發極速入門[公益直播]PHP實戰開發極速入門
  • PHP零基礎視頻教程PHP零基礎視頻教程
  • 《20天入門精通PHP》視頻教程《20天入門精通PHP》視頻教程
  • 視頻教程分類
    118期四肖中特唯一