PHP 7.2.0 的新特性和改進特性
已發表: 2018-03-03PHP 7.2.0 的新版本包括許多很棒的附加功能。 它提供了更多特性、新改進和更好的功能。 它使用戶能夠編寫更好的代碼並以前所未有的方式使用多種有趣的語言功能。 在這篇文章中,我們將著眼於 PHP 最新迭代中引入的最新方面。
此更新提供了許多新的改進。 它具有許多功能,可確保更好的編碼。 PHP 7.2.0 中的新特性包括:
- 對象輸入提示
- 各種不可數物體的計數
- 數組強制轉換/對像中數字鍵的轉換
- 刪除了 Mcrypt 擴展
- 密碼哈希中的 Argon2
- HashContext 作為對象
- 更好的 TLS 常數到各種健全的值
- 新的鈉延伸
眾所周知,Web 開發人員通常喜歡或討厭使用 PHP 語言。 任何真正喜歡使用 PHP 的人一定會喜歡這種新的編碼解決方案。
如果您是一名喜歡使用 PHP 的 Web 開發人員,請繼續閱讀我們討論 PHP 7.2.0 更新中最重要的新特性。
PHP 7.2.0 中的核心改進
以下是 PHP 最新更新中的一些核心改進。
Trait 屬性錯誤的解決方案
在 PHP 7.2.0 發布之前,存在一個未修復的 trait 屬性錯誤。 在最新的更新中,如果一個 trait 定義了一個屬性,一個類不能定義一個具有相同名稱的屬性,除非它更兼容(相同的初始值和可見性)。 否則,它會發出致命錯誤。
因此,與 PHP 7 和 PHP 7.1 不同,我們現在可以預期會收到一個致命錯誤。 此行為已在最近的 PHP 更新中得到修復,現在它的工作方式與 PHP 文檔中所說的一樣。 現在您可以進行嚴格的比較。 當您在 PHP 7.2 中運行腳本時,您將收到一個致命錯誤的通知。
返回類型聲明
PHP 7 的最新更新增加了對返回類型聲明的進一步支持。 就像參數類型聲明一樣,這個聲明類型也聲明了可能從函數返回的值的類型。 對於返回類型聲明,提供與參數類型聲明相同的類型。
在 PHP 7.2.0 中,用戶可以根據對像數據類型使用返回類型聲明。
此外,嚴格類型也會對返回類型聲明產生影響。 考慮到默認的弱模式,所有返回的值都被強制轉換為準確的類型(如果它們不同並且還不是該類型)。 但是,在強模式下,所有返回的值都必須是準確/正確的類型。 否則,會收到TypeError 。
但是,當您覆蓋父方法時,子方法應將返回類型聲明與父方法的返回類型聲明相匹配。 但是如果父方法沒有定義返回類型,那麼子方法可以定義它。
生成器返回表達式
PHP 的這一特性建立在 PHP 5.5 中發布的稱為生成器功能的功能之上。 它允許在生成器中使用 return 語句並允許返回最終表達式。 但是,通過引用返回是受限制的。 該值可以通過使用新的生成器“ getReturn()”方法獲得,該方法僅在生成器完成產生值時使用。
儘管如此,使用生成器清楚地返回最終值的能力絕對是一種方便的能力。 這是因為它允許生成器完全返回最終值,這可以由執行生成器的客戶端代碼特別處理。 相比之下,這比強制客戶端代碼首先檢查是否產生最終值然後特別處理該值要簡單得多。
會話選項
Session_start()現在可以識別許多選項,這些選項會覆蓋 php.ini 中設置的各種會話配置指令。
這些選項也被擴展以方便session.lazy_write,它默認保持打開狀態,並使 PHP 僅通過更改會話數據和read_and_close覆蓋任何會話文件。 這是一個選項,只能傳遞給session_start()以確認必須讀取會話數據,然後必須立即關閉會話,同時保持不變。
PHP 7.2.0 中的安全改進
以下是最近在 PHP 7.2.0 中實現的安全改進。
密碼哈希中的 Argon 2 算法
Argon 2 是 2005 年密碼哈希競賽的獲勝者,是一種強大的哈希算法。 Argon2 正在被公認為通用互聯網標準。 目前,該算法被認為比另一種哈希算法 Bcrypt 更具成本效益和安全性。 新加入的 Argon2 可以通過函數password_hash() 使用。
雖然 Bcrypt 只考慮了一個成本因素,但新的 Argon2 考慮了以下三個成本因素 -
- 時間成本——定義散列算法的迭代次數
- 內存成本- 定義在散列期間必須使用的 KiB 數。
- 並行度因子- 設置在散列期間將消耗的並行線程數。
默認成本因子由三個新常量定義,如下所示:
- PASSWORD_ARGON2_DEFAULT_TIME_COST
- PASSWORD_ARGON2_DEFAULT_MEMORY_COST
- PASSWORD_ARGON2-DEFAULT-THREADS
Lib-sodium 取代 Mcyrpt
PHP 7.2.0 的另一個主要改進是從 PHP 核心中刪除了傳統的 Mcrypt 加密庫並添加了 Libsodium。
Mcrypt 被認為是廢棄軟件,是對語言發展的限制。 這就是它在 PHP 7.2.0 中被 Libsodium 取代的原因。 Libsodium 是一個高級密碼庫,它提供真實的加密以及高效的橢圓曲線密碼。
Libsodium 由精心挑選的算法組成,這些算法由安全專家實施,以防止側通道漏洞。 換句話說,Libsodium 是一個跨語言和跨平台的庫,用於解密、加密、密碼散列、簽名等。
已棄用的特性和功能
以下是 PHP 7.2.0 的一些不推薦使用的功能和特性,預計在 PHP 8.0 發布之前將被刪除。
Gmp_random()被視為依賴於平台的功能,可能會被棄用。 相反,將使用gmp_random_rage()和gmp_random_bits() 。
(未設置)強制轉換是另一個通常返回 null 的表達式,因此被認為是無用的。
Each()用於像數組一樣迭代foreach() ,但foreach()是首選,因為它的速度更快。
PHP 5.1 中的spl_autoload_register取代了_autoload函數。 但是現在在編譯過程中遇到函數時很可能會發生棄用。
mbstring .fucc_overload也被設置為棄用。
assert()函數確認給定的斷言並在結果為FALSE時採取適當的措施。 將不推薦使用帶有字符串參數的 assert(),因為它會導致 RCE 漏洞。
$php_errormsg變量在接收到非致命錯誤時在本地範圍內構建。 但現在,隨著 PHP 7.2.0 的發布,將使用error_clear_last和error_get_last 。
$errcontext 可能會被棄用,因為此功能會導致優化問題。 由於 $errcontext 用於修改當前範圍內的所有對象和引用,因此幾乎不使用此功能。
Create_function()有很多安全問題。 此外,它還存在內存使用和性能不佳的問題。
為什麼 WordPress 開發人員應該使用 PHP 7.2.0?
最近對 PHP 的升級帶來了新的功能和改進的安全措施。 這可能包括現代密碼學、核心功能的添加以及各種站點的更快加載速度等因素。
使用 PHP 的好處
PHP 是一種高度兼容的語言,幾乎可以與所有數據庫和服務器全球標準(即 PostgreSQL、MySQL、Sybase、Oracle、Microsoft SQL Server 和 Informix)一起使用。 它提供由開源社區支持的快速性能。
它用於多種用途,例如生成文件和動態頁面。 PHP 使您能夠在站點數據庫中管理和存儲信息。 它允許用戶使用安全功能加密數據並限制對網站的未經授權的訪問。
PHP 被許多知名網站使用,例如Yahoo、Facebook 和 Wikipedia。
更重要的是,PHP 7.2.0 的最新更新提供了重要的安全改進、令人興奮的新功能和性能增強。
PHP 7.2.0 的性能
根據 Phoenix 基準測試,PHP 7.2.0 比 7.1 快 13%,比 7.0 快近 20%。 與 PHP 2.6(40% 的 PHP 用戶仍在使用)相比,它快了近 25%。
有許多測試支持這些統計數據和發現。 官方 PHP 基準測試顯示 PHP 7 的效率是 5.6 的兩倍,速度是 5.6 的兩倍。 PHP 7 有一半的延遲。 此外,Kinsta 等其他基準測試表明 PHP 7 的速度可能比以前的版本快三倍。
如上所述,PHP 7.2.0 性能提高的主要原因是包含高級特性和棄用舊函數。 這正是使這個版本的 PHP 非常適合 WordPress 用戶的原因。 但是,開發人員必須檢查代碼並更新已棄用的功能,以確保一切都兼容。
PHP 7.2.0 的安全支持
PHP 7.2.0 不再提供安全支持。 但是,關鍵支持將在 2018 年底之前提供。PHP 社區不再為小問題和錯誤提供支持。 好消息是 PHP 7.2.0 的最新更新將確保高級安全更新正常工作,並且該項目將得到 PHP 社區的持續支持。
Libsodium 是從舊 PHP 遷移到 PHP 7.2.0 的最重要和最改進的特性。 幸運的是,Libsodium 很容易更新。
如果您計劃更新到 PHP 7.2.0,請確保您的代碼包含集成和單元測試。 此類測試將有助於在任何與應用程序相關的問題出現在實際環境中之前發現它。
簡而言之
與以前的版本(例如 PHP 5.6)相比,PHP 7.2.0 絕對是一個重大升級。 當您將代碼從 PHP 5.6 升級到 PHP 7 時,您可能會在代碼所依賴的庫和代碼本身中遇到一些不兼容問題。 然而,採用 PHP 7.2 的好處將使您的努力變得值得。
由於 PHP 7.2 比舊版本的 PHP 快得多,這允許用戶通過實現 PHP 語言的高級代碼為他們的網站用戶提供改進的服務。
那麼您準備好切換到新的 PHP 7.2 了嗎? 如果您還沒有更新它,那麼現在是開始過渡的好時機。 是時候檢查代碼併升級您的腳本了。
在下面的評論部分告訴我們您是如何發現 PHP 7.2.0 的新改進特性和功能的!