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