PHP 7.4
計劃在2019年11月21日發佈,它主要新增瞭如下幾個特性:php
short closure
)Improved type variance
(不會翻譯)serialization
__toString
中拋出異常php
短標籤短閉包函數能夠減小冗餘代碼:數組
array_map(function (User $user) { return $user->id; }, $users)
array_map(fn(User $user) => $user->id, $users)
須要注意幾點:閉包
use
關鍵詞fn
關鍵詞開始$this
能夠像普通的閉包同樣使用return
關鍵詞還可使用更嚴格類型的方式框架
$ids = array_map(fn(User $user): int => $user->id, $user);
PHP
預加載能夠極大的提升性能dom
優勢:在PHP 7.4
之前,若是你使用了框架來開發,每次請求文件就必須加載和從新編譯。預加載在框架啓動時在內存中加載文件,並且在後續請求中永久有效。函數
缺點:性能的提高會在其餘方面花費很大的代價,每次預加載的文件發生改變時,框架須要從新啓動。性能
class A { public string $name; public Foo $foo; }
不得不說,PHP
愈來愈接近Java
等強類型語言this
Improved type variance
協變返回類型:翻譯
class ParentType {} class ChildType extends ParentType {} class A { public function covariantReturnTypes(): ParentType { /* … */ } } class B extends A { public function covariantReturnTypes(): ChildType { /* … */ } }
依賴(是否是很熟悉):code
class ParentType {} class ChildType extends ParentType {} class A { public function covariantReturnTypes(): ParentType { /* … */ } } class B extends A { public function covariantReturnTypes(): ChildType { /* … */ } }
在目前> PHP 7
之後的寫法:
$data['date'] = $data['date'] ?? new DateTime();
在PHP 7.4
你能夠這樣寫:
$data['date'] ??= new DateTime();
合併數組到另外一個數組中,返回一維數組
$arrayA = [1, 2, 3]; $arrayB = [4, 5]; $result = [0, ...$arrayA, ...$arrayB, 6 ,7]; // [0, 1, 2, 3, 4, 5, 6, 7]
注意 :只對數字索引有效
RFC
添加了兩個新的魔術方法__serialize
和__unserialize
容許使用下劃線更直觀的分隔數值
$unformattedNumber = 107925284.88; $formattedNumber = 107_925_284.88;
PHP 7.4
以前,若是你這樣寫:
echo "sum: " . $a + $b;
PHP
會解析爲:
echo ("sum: " . $a) + $b;
PHP 8
將會解析爲:
echo "sum :" . ($a + $b);
__toString
中拋出異常PHP 7.4
將會新增ReflectionReference
類
php
短標籤<?
將會在PHP 8
中移除,<?=
會繼續保留
PHP
遺留了一些奇怪的怪癖,好比
1 ? 2 : 3 ? 4 : 5; // 將會在 PHP 7.4 中廢棄,在 PHP 8中會拋出編譯錯誤 (1 ? 2 : 3) ? 4 : 5; // 正確
parent::
var_dump
打印DateTime
和DateTimeImmutable
shi'實例,將再也不保留對象上的可訪問屬性openssl_random_pseudo_bytes
會在調用錯誤時拋出異常PDO
和PDOStatement
實例將會生成一個Exception
而不是PDOException
異常get_object_vars()
打印ArrayObject
實例將會返回ArrayObject
本身的屬性,而不是被包裹的數組或對象的值,數組強制轉換不受影響