預載入
預載入是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 文件。 以下是一些突出顯示的向後不相容的更改:
- 在沒有父級的類中引用
parent ::
將生成編譯時錯誤而不是執行時錯誤。 - 在
DateTime
或DateTimeImmutable
例項上呼叫var_dump
將不再在物件上留下可訪問的屬性。 openssl_random_pseudo_bytes
將在錯誤情況下丟擲異常。- 嘗試序列化
PDO
或PDOStatement
例項將生成異常而不是PDOException
。 - 在
ArrayObject
例項上呼叫get_object_vars()
將返回ArrayObject
本身的屬性,而不是包裝陣列或物件的值。 請注意,(array)
強制轉換不受影響。
等一下......
如果你已經看到文章末尾了,你很可能對 PHP 感興趣。 也許你也有興趣閱讀我的其他內容? 以下是我寫的一些內容。 本人部落格 :iacblog 本人公眾號 :php_open