本篇文章給大家帶來的內容是關於php7中新特性的總結,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所協助。
PHP7 從發布到現在已經有快三年的時間了,現在已經發展到 PHP7.2.9 版本了。它的發布給 PHP 帶來了很大的效能提升,這主要是得益於 PHP 對 Zend 引擎的深度最佳化,同時還降低了 PHP 對系統的資源佔用。
主要的變化有以下幾點:
在PHP之前的版本中,PHP代碼在文法解析階段直接產生了 ZendVM
指令,也就是在 zend_language_parser.y
中直接產生 opline
指令,這使得編譯器與執行器耦合在一起。
PHP7 中增加了抽象文法樹,首先是將PHP代碼解析產生抽象文法樹,然後將抽象文法樹編譯為 ZendVM
指令。抽象文法樹的加入使得 PHP 的編譯器與執行器很好地隔離開,編譯器不需要關心指令的建置規則,然後執行器根據自己的規則將抽象文法樹編譯為對應的指令,執行器同樣不需要關心該指令的文法規則是什麼樣子的。
PHP7 中使用 Native TLS
(線程局部儲存)來儲存線程的資源集區,簡單地講就是通過 __thread
標識一個全域變數,這樣這個全域變數就是線程獨享的了,不同線程的修改不會相互影響。
PHP7中可以指定函數參數及傳回值的類型。
PHP7 將引用計數轉移到了具體的 value
中,這樣更合理。除此之外,zval
結構的大小也從 24byte 少到了 16byte,這是 PHP7 能夠降低系統資源佔用的一個最佳化點所在。
PHP5.x 中很多操作會直接拋出 error 錯誤,PHP7 中將多數錯誤改為了異常拋出,這樣一來就可以通過 try catch
捕捉到。
PHP7 中 HashTable
有非常大的變化,HashTable
結構的大小從 72byte 減小到了 56byte,同時,數組元素 Bucket
結構也從 72byte 減小到了 32byte。
在 PHP7 中不再採用傳參的方式,而是將 execute_data
、opline
通過寄存器來進行儲存,避免了傳參導致的頻繁出入棧操作,同時,寄存器相比記憶體的訪問速度更快。
PHP5.x 通過 zend_parse_parameters()
解析函數的參數,PHP7 提供了另外一種方式,同時保留了原來的方式,但是新的解析方式速度更快。