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