PHP 7.4 新特性
原文來源:https://geixue.com/blogs/channels/php/new-features-in-php-74-xrhbf2
PHP 7.4 預計在 2019 年年末就會正式發布了,本文先來看看一下 PHP 7.4 的新特性。
1.預載入
預載入的實現理論上是可以為 PHP 帶來很大的性能提升的。比如說:現在傳統的 PHP 框架或者項目,都是有一次請求就載入和重新編譯一次文件的。預載入的實現使得我們可以直接將 PHP 文件載入到內存中,並一次來永駐內存來應對後續的請求。(跟 swoole 有點像了?)
不過預載入也會帶來一點機器內存要求和一些損耗,你還需要注意的是,每次在更新完 PHP 文件之後,你需要重啟服務才可以使得新的 PHP 文件生效。
2.屬性類型限定
在定義類屬性的時候,你可以限定屬性的類型string
boolean
或者是一個類的實例:
class GeiXue
{
public string $name;
public Foo $foo;
}
3.類型限定
其實類型限定在 PHP 很早之前就支持了,只不過在 7.4 版本之後,PHP 做得更好了,我們來看兩個例子:class Parents {}
class Child extends Parents {}
class A
{
public function covariantReturnTypes(): Parents
{ /* … */ }
}
class B extends A
{
public function covariantReturnTypes(): Child
{ /* … */ }
}
或者下面這個例子你就很熟悉了:參數類型限定
class A
{
public function contraVariantArguments(Child $child)
{ /* … */ }
}
class B extends A
{
public function contraVariantArguments(Parents $parent)
{ /* … */ }
}
在 Laravel 的項目中,你應該經常見到這些。
4.外部函數介面
外部函數介面(Foreign Function Interface)總的來說就是允許你調用 C 代碼,也就是說,最好的應用場景可能就是:你以後寫 PHP 的擴展就可直接用 PHP 來寫了!
不過需要注意的是:這目前來說還是比較複雜的,你最好還是有點 C 語言的基礎。
5.新的 Null
三元操作符
$data[date] = $data[date] ?? new DateTime();
PHP 7.4 之後你可以這樣:
$data[date] ??= new DateTime();
6.自定義對象序列化
在 PHP 7.4 的時候,增加了__serialize
和 __unserialize
這兩個魔術方法,你可以用來自定義對象的序列化。7.新增 mb_str_split
函數
str_split
函數的 mb (multi bytes) 版本,跟你接觸過的 mb_substr
和 substr
是同理的。
8.PEAR 不再默認開啟
由於 PEAR 的開發已經很久沒有活躍過了,PHP 官方團隊決定移除 PEAR 的默認開啟。9.廢除 ext/wwdx
此種數據交換格式貌似從來都沒有一個行業標準,所以現在也是該它們退休的時候了。
最後,你需要注意 PHP 7.4 的向後不兼容特性,可以通過此鏈接來查看詳細內容:https://github.com/php/php-src/blob/PHP-7.4/UPGRADING
Happy Hacking!
推薦閱讀: