溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP7有哪些新特性以及做了哪些改進

發布時間:2021-10-13 11:57:18 來源:億速云 閱讀:137 作者:柒染 欄目:編程語言

今天就跟大家聊聊有關PHP7有哪些新特性以及做了哪些改進,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

  PHP 7 是一個具有里程碑意義的版本,它不僅增加了很多新特性,讓代碼編寫更加靈活,還改進了底層設計,提高了 PHP 執行效率。

  PHP 7 新特性

  PHP 7 中的新特性主要有以下幾點:

  標量類型聲明。

  函數返回值類型聲明。

  新增 null 合并運算符。

  新增組合比較符。

  支持通過 define() 定義常量數組。

  新增支持匿名類。

  支持 Unicode codepoint 轉譯語法。

  更好的閉包支持。

  為 unserialize() 提供過濾。

  新增加 IntlChar 類。

  支持 use 語句從同一 namespace 導入類、函數和常量。

  新增整除函數 intdiv()。

  session_start() 支持接收數組參數。

  PHP 7 的改進和優化

  相較于以前的版本,PHP 7 在語言語法層面和底層架構層面都有一些改進:

  在語法層面的改進主要是增加了一些新特性、移除了一些擴展、改變了錯誤異常處理等。

  在底層結構方面,改變了存儲各種變量的 Zval 和 Zend_String 結構體、優化了 Zend Array 的 HashTable、改進了函數的調用機制等。

  尤其是底層結構的改進,大幅提升了 PHP 7 的執行效率,使得其執行速度比 PHP 5 高出一倍左右。

  PHP 7 引入了嚴格模式開關

  PHP 是一個弱類型的語言,不過在 PHP 7 中支持變量類型的定義,引入了一個開關指令declare(strict_type=1);。這個指令一旦開啟,就會強制當前文件下的程序遵循嚴格的函數傳參類型和返回類型。不開啟 strict_type,PHP 將會嘗試轉換成要求的類型;開啟之后,PHP 不再做類型轉換,類型不匹配就會拋出錯誤。

  要使用嚴格模式,一個 declare 聲明指令必須放在文件的頂部。這意味著嚴格聲明標量是基于文件可配的。這個指令不僅影響參數的類型聲明,還影響函數的返回值聲明。

  PHP 7 改進了錯誤處理機制

  另外,在 PHP 7 中,很多致命錯誤以及可恢復的致命錯誤都被轉換為異常來處理了。這些異常繼承自 Error 類,此類實現了 Throwable 接口(所有異常都實現了這個基礎接口)。

  這也意味著,當發生錯誤的時候,以前代碼中的一些錯誤處理的代碼將無法被觸發。因為在 PHP 7 版本中,已經使用拋出異常的錯誤處理機制了。(如果代碼中沒有捕獲 Error 異常,就會引發致命錯誤)。

  PHP 7 優化了 Zval

  在 2013 年的時候,惠新宸和 Dmitry(PHP 語言內核開發者之一)就曾經在 PHP 5.5 的版本上做過一個 JIT(Just In Time,即時編譯,一種軟件優化技術)的嘗試。

  PHP 5.5 原來的執行流程是將 PHP 代碼通過詞法和語法分析編譯成 opcode 字節碼,然后 Zend 引擎讀取這些 opcode 指令,逐條解析執行。他們在 opcode 環節后又引入了類型推斷(TypeInf),然后通過 JIT 生成 ByteCodes 再執行。

  采用這種技術優化,PHP 的效率在實際項目中并沒有取得明顯的提升,于是他們重新設計了 PHP 的底層語言結構。Zval 是存儲 PHP 中變量的載體,是一個 C 語言實現的結構體(struct),PHP 5 的 Zval 在內存中占據 24 個字節,而在 PHP 7 中優化后的 Zval 只占 16 個字節,這樣變量的存儲變得非常簡單和高效。

  PHP 7 優化了數組

  PHP 7 優化了數組的 HashTable 實現,PHP 5 的數組存儲形式是一個支持雙向鏈表的 HashTable,不僅支持通過數組的 key 來做 hash 映射訪問元素,也能通過 foreach 以訪問雙向鏈表的方式遍歷數組元素。

  當我們通過 key 值訪問一個元素內容的時候,有時需要 3 次的指針跳躍才能找對需要的內容。最重要的一點是,這些數組元素的存儲是分散在各個不同的內存區域的,在 CPU 讀取的時候,因為它們很可能不在同一級緩存中,導致 CPU 不得不到下級緩存甚至內存區域查找,從而引起 CPU 緩存命中下降,進而增加更多的耗時。

  優化后的 Zend Array 最大的特點是整塊的數組元素和 hash 映射表全部連接在一起,被分配在同一塊內存中。如果是遍歷一個整型的簡單類型數組,效率會非???,因為數組元素(Bucket)本身是連續分配在同一塊內存里的,并且數組元素的 Zval 會把整型元素存儲在內部,也不再有指針外鏈,全部數據都存儲在當前內存區域內。

  當然,最重要的是它能夠避免 CPU 緩存命中率下降。

  PHP 7 改進了函數調用

  PHP 7 還改進了函數的調用機制,通過優化參數傳遞的環節減少了一些指令,提高執行效率。

看完上述內容,你們對PHP7有哪些新特性以及做了哪些改進有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女