新聞中心

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比利通網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式利通網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋利通地區(qū)。費(fèi)用合理售后完善,十年實(shí)體公司更值得信賴。
PHP 7 新特性
PHP 7 中的新特性主要有以下幾點(diǎn):
- 標(biāo)量類型聲明。
- 函數(shù)返回值類型聲明。
- 新增 null 合并運(yùn)算符。
- 新增組合比較符。
- 支持通過 define() 定義常量數(shù)組。
- 新增支持匿名類。
- 支持 Unicode codepoint 轉(zhuǎn)譯語法。
- 更好的閉包支持。
- 為 unserialize() 提供過濾。
- 新增加 IntlChar 類。
- 支持 use 語句從同一 namespace 導(dǎo)入類、函數(shù)和常量。
- 新增整除函數(shù) intdiv()。
- session_start() 支持接收數(shù)組參數(shù)。
除了以上列舉的 13 點(diǎn)新特性之外,還有其他一些變更,讀者可到 http://php.net/manual/zh/migration70.new-features.php 查看有關(guān) PHP 7 新特性的詳細(xì)變更和示例。
PHP 7 的改進(jìn)和優(yōu)化
相較于以前的版本,PHP 7 在語言語法層面和底層架構(gòu)層面都有一些改進(jìn):
- 在語法層面的改進(jìn)主要是增加了一些新特性、移除了一些擴(kuò)展、改變了錯(cuò)誤異常處理等。
- 在底層結(jié)構(gòu)方面,改變了存儲各種變量的 Zval 和 Zend_String 結(jié)構(gòu)體、優(yōu)化了 Zend Array 的 HashTable、改進(jìn)了函數(shù)的調(diào)用機(jī)制等。
尤其是底層結(jié)構(gòu)的改進(jìn),大幅提升了 PHP 7 的執(zhí)行效率,使得其執(zhí)行速度比 PHP 5 高出一倍左右。
PHP 7 引入了嚴(yán)格模式開關(guān)
PHP 是一個(gè)弱類型的語言,不過在 PHP 7 中支持變量類型的定義,引入了一個(gè)開關(guān)指令
declare(strict_type=1);。這個(gè)指令一旦開啟,就會強(qiáng)制當(dāng)前文件下的程序遵循嚴(yán)格的函數(shù)傳參類型和返回類型。不開啟 strict_type,PHP 將會嘗試轉(zhuǎn)換成要求的類型;開啟之后,PHP 不再做類型轉(zhuǎn)換,類型不匹配就會拋出錯(cuò)誤。
要使用嚴(yán)格模式,一個(gè) declare 聲明指令必須放在文件的頂部。這意味著嚴(yán)格聲明標(biāo)量是基于文件可配的。這個(gè)指令不僅影響參數(shù)的類型聲明,還影響函數(shù)的返回值聲明。
PHP 7 改進(jìn)了錯(cuò)誤處理機(jī)制
另外,在 PHP 7 中,很多致命錯(cuò)誤以及可恢復(fù)的致命錯(cuò)誤都被轉(zhuǎn)換為異常來處理了。這些異常繼承自 Error 類,此類實(shí)現(xiàn)了 Throwable 接口(所有異常都實(shí)現(xiàn)了這個(gè)基礎(chǔ)接口)。
這也意味著,當(dāng)發(fā)生錯(cuò)誤的時(shí)候,以前代碼中的一些錯(cuò)誤處理的代碼將無法被觸發(fā)。因?yàn)樵?PHP 7 版本中,已經(jīng)使用拋出異常的錯(cuò)誤處理機(jī)制了。(如果代碼中沒有捕獲 Error 異常,就會引發(fā)致命錯(cuò)誤)。
PHP 7 優(yōu)化了 Zval
在 2013 年的時(shí)候,惠新宸和 Dmitry(PHP 語言內(nèi)核開發(fā)者之一)就曾經(jīng)在 PHP 5.5 的版本上做過一個(gè) JIT(Just In Time,即時(shí)編譯,一種軟件優(yōu)化技術(shù))的嘗試。
PHP 5.5 原來的執(zhí)行流程是將 PHP 代碼通過詞法和語法分析編譯成 opcode 字節(jié)碼,然后 Zend 引擎讀取這些 opcode 指令,逐條解析執(zhí)行。他們在 opcode 環(huán)節(jié)后又引入了類型推斷(TypeInf),然后通過 JIT 生成 ByteCodes 再執(zhí)行。
采用這種技術(shù)優(yōu)化,PHP 的效率在實(shí)際項(xiàng)目中并沒有取得明顯的提升,于是他們重新設(shè)計(jì)了 PHP 的底層語言結(jié)構(gòu)。Zval 是存儲 PHP 中變量的載體,是一個(gè) C 語言實(shí)現(xiàn)的結(jié)構(gòu)體(struct),PHP 5 的 Zval 在內(nèi)存中占據(jù) 24 個(gè)字節(jié),而在 PHP 7 中優(yōu)化后的 Zval 只占 16 個(gè)字節(jié),這樣變量的存儲變得非常簡單和高效。
PHP 7 優(yōu)化了數(shù)組
PHP 7 優(yōu)化了數(shù)組的 HashTable 實(shí)現(xiàn),PHP 5 的數(shù)組存儲形式是一個(gè)支持雙向鏈表的 HashTable,不僅支持通過數(shù)組的 key 來做 hash 映射訪問元素,也能通過 foreach 以訪問雙向鏈表的方式遍歷數(shù)組元素。
當(dāng)我們通過 key 值訪問一個(gè)元素內(nèi)容的時(shí)候,有時(shí)需要 3 次的指針跳躍才能找對需要的內(nèi)容。最重要的一點(diǎn)是,這些數(shù)組元素的存儲是分散在各個(gè)不同的內(nèi)存區(qū)域的,在 CPU 讀取的時(shí)候,因?yàn)樗鼈兒芸赡懿辉谕患壘彺嬷?,?dǎo)致 CPU 不得不到下級緩存甚至內(nèi)存區(qū)域查找,從而引起 CPU 緩存命中下降,進(jìn)而增加更多的耗時(shí)。
優(yōu)化后的 Zend Array 最大的特點(diǎn)是整塊的數(shù)組元素和 hash 映射表全部連接在一起,被分配在同一塊內(nèi)存中。如果是遍歷一個(gè)整型的簡單類型數(shù)組,效率會非???,因?yàn)閿?shù)組元素(Bucket)本身是連續(xù)分配在同一塊內(nèi)存里的,并且數(shù)組元素的 Zval 會把整型元素存儲在內(nèi)部,也不再有指針外鏈,全部數(shù)據(jù)都存儲在當(dāng)前內(nèi)存區(qū)域內(nèi)。
當(dāng)然,最重要的是它能夠避免 CPU 緩存命中率下降。
PHP 7 改進(jìn)了函數(shù)調(diào)用
PHP 7 還改進(jìn)了函數(shù)的調(diào)用機(jī)制,通過優(yōu)化參數(shù)傳遞的環(huán)節(jié)減少了一些指令,提高執(zhí)行效率。
網(wǎng)頁題目:PHP7有哪些新特性?做了哪些改進(jìn)?
標(biāo)題來源:http://m.5511xx.com/article/dpdigdi.html


咨詢
建站咨詢
