PHP 8:完整指南

已發表: 2021-01-05

2020 年 11 月 26 日,我們進入了 PHP 8 的新世界。每次 PHP 更新都會帶來一整套全新的主要功能。 雖然並非所有更新對大多數臨時用戶都很重要,但對於大多數經驗豐富的 WordPress 開發人員來說,即使是其他更新也太小眾了。

但是,無論您的開發處於何種級別,新版本的各個方面(例如速度的提高和可能損害現有代碼的重大更改)都可能對您的日常工作流程產生負面影響。

在本指南中,我們將介紹 PHP 8 新版本中最重要的變化。讓我們深入了解。

在本指南中

    為什麼會發生 PHP 更新

    作為一個引擎,PHP 是不斷變化的。 新的位總是被修改或添加以幫助優化代碼並使 PHP 更容易和更容易使用。

    WordPress 插件和主題創建者以及網站開發人員需要在 PHP 更改發生時及時掌握它們。 通過這樣做,您將領先一步,並避免在發生更多更新後翻閱文檔頁面。

    PHP 的每個新版本都旨在為開發環境帶來積極的變化。 不幸的是,有時某些調整會損害您現有的代碼。

    當不兼容、落後或過時的屬性與新的 PHP 更新發生衝突時,最終可能會破壞整個站點或導致站點的某些區域停止工作。

    最好了解發布了哪些潛在的重大更改,以便您可以直接在自定義代碼中解決它們。 這也有助於您使用具有更優化表達式的較新代碼。

    但是,即使您在職業生涯中沒有接觸過任何自定義代碼,當您的 WordPress 儀表板為 PHP 的更新版本添加 WordPress PHP Update Required 通知時,您也必須決定是否要升級或不。

    這個問題的答案幾乎總是肯定的。 但在您這樣做之前,明智的做法是查看主要功能更改並確保沒有任何可能導致您出現問題的內容。 正如一句老話所說,“安全總比後悔好。”

    PHP 8

    PHP 8 版本中的新功能

    這個版本的 PHP 無論如何都不是最大的更新。 但仍有一些令人興奮的變化值得我們關注。

    在某些方面,PHP 8 是一個相對較小的更新,這讓人鬆了一口氣。 這意味著可能導致現有代碼出現問題的破壞性更改較少。

    換句話說,當前的 PHP 版本為您提供了一些很棒的新功能,而無需花費數小時來解決問題。

    雖然在此版本的 PHP 中進行了一些其他更改,但本指南將涵蓋最相關的更改。

    及時 (JIT) 編譯器

    新版 PHP 中最令人興奮,當然也是最大的新增功能是 Just In Time(即 JIT)編譯器。

    您可能知道,PHP 是一種解釋型語言。 這意味著它是實時運行的,而不是在編譯後在預先確定的啟動時間運行。

    JIT 為 PHP 帶來的是編譯代碼。 編譯後的代碼在某些情況下會提高性能。

    如果您像許多 PHP 開發人員一樣,那麼您可能正在使用 Web 應用程序。 不幸的是,JIT 對 Web 應用程序幫助不大。 但在以下任務方面,它標誌著巨大的進步:

    • 數據分析
    • 3D 渲染
    • 人工智能
    • 需要很長時間才能運行的其他進程

    儘管這些不一定是當前最常見的 PHP 應用程序,但具有前瞻性的開發人員肯定會更多地使用 PHP。

    JIT 編譯器有助於使 PHP 更靈活地這樣做。

    事實上,JIT 幾乎可以保證打開 PHP 的視野,並吸引有興趣將其用於新用途的新開發人員。

    對於現有項目,它可能不會做太多事情。

    在實施 JIT 之前,請確保已在隔離環境中對其進行了測試,以查看性能是否有任何改進。

    屬性

    PHP 新版本支持屬性。 這些是您添加到代碼中的一小部分元數據,例如參數、類和函數。

    這意味著您不再需要使用文檔塊作為標準的解決方法。 儘管這聽起來像是一個小改動,但它實際上讓 PHP 開發人員的生活變得更加輕鬆。

    您現在可以向任何一段單獨的代碼添加任意數量的屬性,然後使用 use 語句導入它們。

    您甚至可以向屬性添加參數。

    要向您的代碼添加屬性,只需在屬性周圍添加兩個“小於”和兩個“大於”符號。

    重要的是要注意屬性不向後兼容。 如果將它們移植到舊版本的 PHP 中,它們將導致錯誤。

    您可能知道,使用 docblock 的標準解決方法是功能齊全的。 但它也一直很笨重。 使用新版本的 PHP,您現在可以直接添加屬性。

    儘管它是對 PHP 的一個小補充,但它的影響卻是巨大的。

    新匹配表達式

    Switch 語句是 if 語句的更健壯的版本。 但是,PHP 中的新匹配表達式進一步改進了該概念。

    這是更短和更嚴格的,這有助於它更好地捕捉錯誤。 它還結合了條件,不需要任何 break 語句。

    在這些方面,新的匹配表達式是一個顯著的改進。

    Switch 仍然比 match 有優勢,因為它可以使用多個表達式。 但除此之外,請考慮閱讀匹配表達式。

    到目前為止,它們看起來像是您可能想要使用的高級替代品。

    聯合類型

    PHP 的關鍵部分之一是類型:將變量分配為布爾值、整數、空值等。

    在此版本的 PHP 之前,您只能分配具有單一類型的變量。 PHP 8 允許您分配兩種或更多類型,也稱為聯合類型。

    例如,您將能夠分配浮點數和整數類型,並且可以使用任何一種。 它們在類型之間用一行指定,例如 float|int。

    當然,您將無法將 void 與任何其他類型結合使用,因為它們是互斥的。

    冗餘或重複的類型,例如 float|float,也不起作用。

    在舊版本的 PHP 中,您可以使用 PHPDoc 註釋來嘗試創建功能聯合類型。 現在,您可以跳過這種變通方法,只需為您的變量分配多種類型。

    靜態返回和混合類型

    作為開發人員,PHP 返回值用於返回函數值是常識。 在此版本之前,不能選擇使用靜態類型。

    “Parent”和“self”是有效的返回類型,但“static”不是。 這個問題在新的 PHP 版本中得到了充分的解決。

    儘管這不是一個非常常見的用例,但如果確實出現,您肯定會很高興能夠訪問它。

    您還會發現一種新的混合類型。 它可能更準確地被描述為偽類型,因為它代表 PHP 中存在的所有其他類型。

    當您處理需要您處理多種不同類型的情況時,最好使用它。

    如果您不選擇特定類型,則混合將是您的默認設置。

    通常,最好使用新的聯合類型而不是混合類型。 這是因為您可能想要更具體。

    然而,這個仍然會為你服務。

    現實情況是,這些都沒有聯合類型那麼大,但它們絕對標誌著改進。

    新的 PHP 8 函數

    新版本的 PHP 帶有您可以使用的新功能。

    • str_starts_withstr_ends_with - 這將檢查字符串是否以特定行結束或開始
    • fdiv - 這將允許除以零時始終反應的除法
    • str_contains – 類似於str_starts_withstr_ends_with但會檢查一個完整的字符串
    • get_debug_type – 行為類似於gettype ,但會返回額外的信息,如類名
    • get_resource_id – 這使得獲取資源 ID 變得容易,例如數據庫連接
    • preg_last_error_msg – 返回一條簡單易讀的錯誤消息

    測試其中一些新功能,看看如何充分利用它們。

    命名參數

    有些人可能會喜歡它,有些人可能會鄙視它。 無論哪種方式,命名參數都在新版本的 PHP 中。

    參數允許您將數據傳遞給函數。 命名參數讓你通過傳遞參數名稱而不是順序來做同樣的事情。

    您仍然可以將它們與有序參數結合起來。 但如果需要,您可以跳過可選參數。

    實際上,這意味著更清晰的代碼和更少的錯誤。 畢竟,代碼越緊越好。 使用起來要容易得多。

    這可能會導致更改參數名稱和向後兼容性的問題,這可能會導致舊 PHP 版本中斷。 但是對於很多開發人員和程序員來說,這些命名參數是一個受歡迎的變化。

    PHP 8 中的重大變化

    新的 PHP 版本確實帶來了一些重大更改。 如果您升級或移植回舊版本的 PHP,這可能會導致錯誤。 查看此重大更改列表,看看哪些更改會影響您。

    1. 引擎警告被重新分類,以便它們顯示適當的嚴重性級別,例如通知、警告和致命錯誤。 認為這是一個不會影響許多項目的微小突破性更改。
    2. TypeError 現在將定期顯示在內部函數上。 這對向後兼容性的影響比我們可能意識到的要大,但它仍然是一個可靠的變化。
    3. 對之前設置為靜默和忽略的錯誤報告級別進行了多項更改。 換句話說,您以前可能沒有看到的新錯誤現在應該傳播。
    4. 排序更可靠、更穩定。 儘管 PHP 7 對排序進行了一些重大更改,但最新的更新對現有代碼的破壞要小得多。
    5. 命名空間名稱現在是單個標記。 它們裡面不能有任何空格。 此更改的影響很小且易於修復。
    6. 在 PHP 的早期版本中,名稱與類匹配的方法被解釋為構造函數。 在新版本中,您必須使用 __construct() 方法。

    還有許多其他小更新很少會導致任何問題。 一般來說,當前的 PHP 更新不會有很多問題。

    在 WordPress 中升級您的 PHP 版本

    作為 WordPress 開發人員,您知道讓您的 PHP 版本保持最新是多麼重要。 令人震驚的是,很大一部分 WordPress 用戶仍在 PHP 5.6 上運行,這是一個巨大的負擔。

    即使您一直在運行 PHP 7.4 並認為您完全是最新的,現在絕對是更新到最新 PHP 版本的時候了。

    在舊版本的 PHP 上運行 WordPress 站點是一個主要的安全風險。 過時的 PHP 版本具有黑客經常利用的可利用的安全流。

    修補現有漏洞的唯一方法是始終保持 PHP 完全最新。

    您還需要運行一個強大的 WordPress 安全插件來加強您的安全保護。

    獲取獎勵內容:WordPress 安全指南
    點擊這裡

    更新 PHP 的另一個原因是速度。 每次更新都會帶來更快的速度和更優化的功能。 當然,最大的顯著差異是 PHP 5.6 和 7.4 之間的差異。 但是您肯定會注意到最新更新的速度有所提高。

    兼容性是在 WordPress 中保持 PHP 更新很重要的最後一個原因。

    過時的 PHP 版本可能會導致許多不同的問題,這些問題可能會導致出現故障或完全破壞網站。

    除此之外,還有一些主題和插件需要完全最新的 PHP 版本才能運行。

    在運行更新之前,請確保您有一個 WordPress 備份插件正在運行,以防更新運行後出現任何衝突。

    升級您的 PHP 版本非常簡單。 您需要做的就是登錄您的 cPanel 或您正在使用的主機的管理儀表板,找到 PHP 版本管理器並勾選最新版本。 但在運行更新之前,請與您的主機確認以確保他們支持最新的 PHP 更新。 有些可能在較舊的軟件上運行。

    有關 PHP 和 WordPress 的更多信息,請查看有關 WordPress 和 PHP 8 的官方 WordPress.org 文檔。

    總結:PHP 8 和 PHP 的未來

    雖然這不是 PHP 7.0 – 7.4 那樣的巨大更新,但 PHP 8 仍然提供了許多您可以利用的功能。

    從 JIT 編譯器到新屬性、匹配表達式和其他對開發人員有用的功能,是時候熟悉這個重要的 PHP 新版本了。

    您預計此更新的哪些部分在您的日常工作流程中使用最多?