一、PHP各版本有哪些技術特性
PHP8
PHP8 的 JIT( Just In Time )無疑是新特性中一大亮點, JIT 是一種編譯器策略,它將代碼表述為一種中間狀態,在運行時將其轉換為依賴于體系結構的機器碼,并即時執行。在 PHP 中,這意味著 JIT 將為 Zend VM 生成的指令視為中間表述,并以依賴于體系結構的機器碼執行,也就是說托管代碼的不再是 Zend VM,而是更為底層的 CPU。
PHP7
Linux內存管理采用分頁機制, 默認的內存是以4KB分頁的, 而虛擬地址和內存地址是需要轉換的, 而這個轉換是要查表的,CPU為了加速這個查表過程都會內建TLB(Translation Lookaside Buffer), 顯而易見如果虛擬頁越小,表里的條目數也就越多,而TLB大小是有限的,條目數越多TLB的Cache Miss也就會越高, 所以如果我們能啟用大內存頁就能間接降低這個TLB Cache Miss
PHP5
Opcache 是PHP的加速器中的一種,由之前的 Zend Optimizer 改名而來通過將 PHP 腳本預編譯的字節碼存儲到共享內存中來提升 PHP 的性能,存儲預編譯字節碼的好處就是省去了每次加載和解析PHP 腳本的開銷。
延伸閱讀:
二、枚舉是什么
PHP 8.1終于添加了對枚舉(也稱為枚舉或枚舉類型)的支持。它們是用戶定義的數據類型,由一組可能的值組成。
編程語言中最常見的枚舉示例是布爾類型,具有true和false兩個可能的值。它是如此普遍,以至于它融入了許多現代編程語言。
根據RFC,PHP 中的枚舉首先將被限制為“單元枚舉”:
此RFC的范圍僅限于“單元枚舉”,即枚舉本身就是一個值,而不是簡單的原始常量的花哨語法,并且不包括附加的相關信息。此功能極大地擴展了對數據建模、自定義類型定義和 monad 樣式行為的支持。枚舉啟用了“使無效狀態不可表示”的建模技術,這會導致更健壯的代碼,而無需進行詳盡的測試。
為了達到這個階段,PHP團隊研究了許多已經支持枚舉的語言。他們的調查發現,您可以將枚舉分為三類:花式常量、花式對象和完整代數數據類型 (ADT)。這是一個有趣的閱讀!
PHP 實現了“Fancy Objects”枚舉,并計劃在未來將其擴展到完整的ADT。它在概念和語義上都模仿了Swift、Rust和Kotlin中的枚舉類型,盡管它沒有直接模仿它們中的任何一個。