來源:公司資(zī)訊 | 2021.11.29
PHP 8.1.0 現已發布,該版本帶來了許多改進和新功能。
枚舉
使用枚舉而不是一(yī)組常量并立即進行驗證。
隻讀屬性
隻讀屬性不能在初始化後更改,比如,在爲它們分(fēn)配值後。它們可以用于對值對象和數據傳輸對象建模。
First-class 可調用語法
現在可以獲得對任何函數的引用。
新的初始化器
對象現在可以用作默認參數值、靜态變量和全局常量,以及屬性參數,這有效地使使用嵌套屬性成爲可能。
純交集類型
當一(yī)個值需要同時滿足多個類型約束時,使用交集類型。注意,目前無法将交集和聯合類型混合在一(yī)起,例如 A&B|C。
Never 返回類型
使用 never 類型聲明的函數或方法表示它不會返回值,并且會抛出異常或通過調用 die()、exit()``、trigger_error()` 或類似的東西來結束腳本的執行。
5
never不同之處void,在于void仍然允許程序繼續。這似乎是一(yī)個新奇的功能,但它實際上對靜态分(fēn)析器來說是一(yī)個非常有用的功能。
Final 類常量
可以聲明 final 類常量,以禁止它們在子類中(zhōng)被重寫。
顯式八進制數字表示法
您可以使用0o和0O來表示八進制數。前面通過在數字前面加上前綴的表示法0仍然有效。
纖程
Fibers 是用于實現輕量級協作并發的原語。它們是一(yī)種創建可以像生(shēng)成器一(yī)樣暫停和恢複的代碼塊的方法,但可以從堆棧中(zhōng)的任何位置進行。Fibers 本身并沒有提供并發性,仍然需要一(yī)個事件循環。但是,它們允許通過阻塞和非阻塞實現共享相同的 API。Fibers 允許擺脫以前在 Promise::then() 或基于生(shēng)成器的協程中(zhōng)看到的樣闆代碼。庫通常會圍繞 Fiber 構建進一(yī)步的抽象,因此無需直接與它們交互。
對字符串鍵控數組的數組解包支持
PHP 以前支持通過擴展運算符在數組内部解包,但前提是數組具有整數鍵。現在也可以使用字符串鍵解包數組。
新array_is_list功能
可能偶爾不得不處理這個問題:确定數組的鍵是否按數字順序排列,從索引 0 開(kāi)始。就像json_encode決定數組應該編碼爲數組還是對象一(yī)樣。
性能優化
PHP 8.1 在性能方面也有一(yī)些改動,包括:
ARM64 的 JIT 後端 (AArch64)
繼承緩存(避免在每個請求中(zhōng)重新鏈接類)
快速類名解析(避免小(xiǎo)寫和哈希查找)
timelib 和 ext/date 性能改進
SPL 文件系統叠代器改進
序列化/反序列化優化
一(yī)些内部函數優化(get_declared_classes()、explode()、strtr()、strnatcmp()、dechex())