php7.4都要來了

新特性

預加載
預加載是PHP核心的一個驚人的補充,能夠帶來一些重大的性能改進。
簡而言之:若是您今天使用的是框架,則必須在每次請求時加載和從新編譯其文件。 預加載容許服務器在啓動時在內存中加載PHP文件,並使它們永久可用於全部後續請求。
性能提高固然須要付出代價:若是預加載文件的來源發生變化,則必須從新啓動服務器。
設置強類型
類變量類型能夠提早聲明:數組

class A
{
    public string $name;
    
    public Foo $foo;
}

複製代碼更新07-01:截至目前,已合併類型屬性,所以已確認PHP 7.4。
改進類型差異
我過去曾寫過 PHP 的類型系統,因此很高興看到一些改進其實是在 PHP 的核心。
類型差別是一個值得本身的博客文章的主題; 簡而言之:你將可以使用協變返回類型......服務器

class ParentType {}
class ChildType extends ParentType {}

class A
{
    public function covariantReturnTypes(): ParentType
    { /* … */ }
}

class B extends A
{
    public function covariantReturnTypes(): ChildType
    { /* … */ }
}
複製代碼和回調參數
class A
{
    public function contraVariantArguments(ChildType $type)
    { /* … */ }
}

class B extends A
{
    public function contraVariantArguments(ParentType $type)
    { /* … */ }
}

更新14-01:RFC目前處於投票階段,但看起來它會毫無問題地經過。框架

外部函數接口
外部函數接口,簡稱 FFI ,容許從用戶區調用 C代碼。 這意味着 PHP 擴展能夠用純 PHP 編寫。
應該指出,這是一個複雜的主題。 您仍然須要 C 的知識才能正確使用此功能。
空融合分配運算符
而不是這樣作:
$data['date'] = $data['date'] ?? new DateTime();
複製代碼你能夠這樣作:
$data['date'] ??= new DateTime();
複製代碼更新22-01:此功能如今在PHP 7.4中合併。
獲取更多利潤
從技術上講,這不是與 PHP 7.4 相關的更新,但它絕對值得一提。 RFC 的投票規則已經改變:它們老是須要 2/3 的多數才能經過。
反射引用
像 Symfony 的 var 轉儲程序這樣的庫很大程度上依賴於反射 AP I來可靠地轉儲變量。 之前,沒有對引用的適當反射支持,致使這些庫依賴 hack 來檢測引用。
PHP 7.4 添加了 ReflectionReference 類來解決這個問題。
更新02-14:RFC已經過,PHP 7.4已確認更改。
mb_str_split 的添加
此函數提供與 str_split 相同的功能,但在多字節字符串上。
ext-hash 始終啓用
正如標題所說,此擴展示在可在全部 PHP 版本中安裝永久使用。
PEAR 默認狀況下不啓用
因爲 PEAR 再也不維護,核心團隊決定使用 PHP 7.4 刪除其默認安裝。
密碼哈希註冊表
對如何使用散列庫進行內部更改,以便用戶能夠更輕鬆地使用它們。
棄用 ext/wwdx
此數據交換格式從未標準化,如今不推薦使用其擴展名。
不向後兼容的變化
升級 PHP 版本時,您應該始終查看完整的 UPGRADING 文檔。
如下是一些突出顯示的向後不兼容的更改:dom

在沒有父級的類中引用 parent :: 將生成編譯時錯誤而不是運行時錯誤。
在 DateTime 或 DateTimeImmutable 實例上調用var_dump 將再也不在對象上留下可訪問的屬性。
openssl_random_pseudo_bytes 將在錯誤狀況下拋出異常。
嘗試序列化 PDO 或 PDOStatement 實例將生成異常而不是 PDOException 。
在 ArrayObject 實例上調用 get_object_vars() 將返回 ArrayObject 自己的屬性,而不是包裝數組或對象的值。 請注意, (array) 強制轉換不受影響。函數

相關文章
相關標籤/搜索