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