PHP 7.4可能會在2019年12月的某個地方發布。此頁面將同時收到定期更新。最后更新時間是2019年1月14日
預加載rfc
預加載是PHP核心的一個驚人的補充,可以帶來一些重大的性能改進。
簡而言之:如果您今天使用的是框架,則必須在每次請求時加載和重新編譯其文件。預加載允許服務器在啟動時在內存中加載PHP文件,并使它們永久可用于所有后續請求。
性能提升當然需要付出代價:如果預加載文件的來源發生變化,則必須重新啟動服務器。
輸入屬性rfc
類變量可以是類型提示:
class A
{
public string $name;
public Foo $foo;
}
更新07-01:截至目前,已合并類型屬性,因此已確認PHP 7.4。
改進的類型方差rfc
我過去曾寫過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目前處于投票階段,但看起來它會毫無問題地通過。
外部函數接口rfc
外部函數接口,簡稱FFI,允許從用戶區調用C代碼。這意味著PHP擴展可以用純PHP編寫。
應該指出,這是一個復雜的主題。您仍然需要C知識才能正確使用此功能。
空融合賦值運算符rfc
而不是這樣做:
$data['date'] = $data['date'] ?? new DateTime();
你可以這樣做:
$data['date'] ??= new DateTime();
更新22-01:此功能現在在PHP 7.4中合并。
反思參考rfc
像Symfony的var轉儲程序這樣的庫很大程度上依賴于反射API來可靠地轉儲變量。以前,沒有對引用的適當反射支持,導致這些庫依賴hack來檢測引用。
PHP 7.4添加了ReflectionReference解決此問題的類。
更新02-14:RFC已通過,PHP 7.4已確認更改。
mb_str_split添加了RFC
此函數提供與str_split多字節字符串相同的功能。
ext-hash始終啟用rfc
正如標題所說,此擴展現在可在所有PHP安裝中永久使用。
PEAR默認情況下未啟用EXTERNALS
由于PEAR不再維護,核心團隊決定使用PHP 7.4刪除其默認安裝。
密碼哈希注冊表RFC
對如何使用散列庫進行內部更改,以便用戶可以更輕松地使用它們。
棄用ext/wwdx RFC
此數據交換格式從未標準化,現在不推薦使用其擴展名。
向后不兼容的更改升級
升級PHP版本時,您應該始終查看完整的UPGRADING文檔。
以下是一些突出顯示的向后不兼容的更改:
parent::在沒有父級的類中引用將生成編譯時錯誤而不是運行時錯誤。
調用var_dump一個DateTime或DateTimeImmutable實例將不再保留對象的可訪問屬性后面。
openssl_random_pseudo_bytes 將在錯誤情況下拋出異常。
嘗試序列化一個PDO或PDOStatement實例將生成一個Exception而不是一個PDOException。
呼叫get_object_vars()上的ArrayObject實例將返回的屬性ArrayObject本身,而不是包裝的陣列或對象的值。請注意,(array)強制轉換不受影響。