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