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