最新消息: 新版網站上線了!!!

PHP7.4新特性短閉包,類型屬性,數組展開運算符,預加載

短閉包 RFC

短閉包實現更簡潔的單行書寫。

array_map(function (User $user) { 
   return $user->id;
}, $users)
array_map(fn(User $user) => $user->id, $users)

關于短閉包的一些注意事項:

  • 可以訪問父作用域,不需要 use 關鍵字。

  • $this 可以像普通的閉包一樣使用。

  • 短閉包只能包含一行,也就是 return 語句。

類型屬性 RFC

類屬性可以提示類型:

class A
{
   public string $name;

   public Foo $foo;
}

改進的類型差異 RFC

協變量返回類型

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)
   
{ /* … */ }
}

Null 合并運算符 RFC

不再需要這樣做:

$data['date'] = $data['date'] ?? new DateTime();

你可以這樣做:

$data['date'] ??= new DateTime();

數組展開運算符 RFC

現在你可以在數組中使用展開運算符:

$arrayA = [1, 2, 3];

$arrayB = [4, 5];

$result = [0, ...$arrayA, ...$arrayB, 6 ,7];

// [0, 1, 2, 3, 4, 5, 6, 7]

請注意,這僅適用于帶數字鍵的數組。

外部函數接口 RFC

外部函數接口,簡稱 FFI,允許從用戶區調用 C 代碼。這意味著 PHP 擴展可以用純 PHP 編寫。

應該指出,這是一個復雜的話題。您仍然需要 C 知識才能正確使用此功能。

預加載 RFC

預加載是 PHP 核心的一個振奮人心的新功能,可以帶來不可預估的性能改進。

簡而言之:如果您今天使用的是框架,則必須在每次請求時加載和重新編譯其文件。預加載允許服務器在啟動時于內存中加載 PHP 文件,并使它們持久化可用于所有后續請求(只要不停電)。

性能提升當然需要付出代價:如果預加載文件的源文件發生變化,則必須重新啟動服務器(該部分若有異議,請查看 RFC 詳細介紹)

自定義對象序列化 RFC

RFC 增加了兩個新的魔術方法:__serialize 和 __unserialize 。這些方法和 __sleep 以及 __wakeup 的不同之處已經在 RFC 中進行了討論。

連接優先級 RFC

如果你書寫了類似以下的內容:

echo "sum: " . $a + $b;

PHP 之前會像這樣編譯它:

echo ("sum: " . $a) + $b;

而 PHP 8 將使它如下編譯:

echo "sum :" . ($a + $b);

當在遇到沒有圓括號包含的 '+' 或 ' - ' 表達式之前有 '.' 的時候,PHP 7.4 會提示棄用警告。


轉載請注明:谷谷點程序 » PHP7.4新特性短閉包,類型屬性,數組展開運算符,預加載

体彩25选5开奖号码