­

PHP7.4新特性

  • 2019 年 12 月 19 日
  • 筆記

PHP7.4新特性

PHP7.4版本已經正式發佈了,做為PHP7版本的最後一次大更新,這一次又為我們帶來了什麼新特性呢?

屬性類型

PHP7.4中的類屬性終於可以為屬性指定變量類型了。一切都是為了JIT鋪墊。靜態固定類型的引入將讓PHP更加的工程化。

class User {      public int $id;      public string $name;  }  

箭頭函數

好吧,上一個是向Java、C++看齊,這一個就是把JavaScript的又一強大特性搬了過來。箭頭函數不陌生吧,配合匿名函數簡直不要太香。

$factor = 10;  $nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);  

空值合併賦值運算操作符

PHP7的??操作符這次也帶來了更新,這回直接可以進行合併賦值操作了。多行代碼或者原來用??寫得很長的代碼這回可以寫得更少了。

$array['key'] ??= computeDefault();  // is roughly equivalent to  if (!isset($array['key'])) {      $array['key'] = computeDefault();  }  

數組元素解包

…操作符可以用在數組元素中了。

$parts = ['apple', 'pear'];  $fruits = ['banana', 'orange', ...$parts, 'watermelon'];  // ['banana', 'orange', 'apple', 'pear', 'watermelon'];  

數字文本可包含下劃線

6.674_083e-11; // float  299_792_458;   // decimal  0xCAFE_F00D;   // hexadecimal  0b0101_1111;   // binary  

strip_tags()可以使用數組定義保留的標籤

strip_tags($str, ['a', 'p']);  // 原來要這麼寫  strip_tags($str, '<a><p>');  

新增自定義對象序列化魔術方法

原來的__sleep()和__weakup()說實話真的太不形象了。睡着和起床了來表示序列化和反序列操作。這個…

不過總算是給掰回來了。PHP7.4新定義了__serialize()和__unserialize()方法。

// Returns array containing all the necessary state of the object.  public function __serialize(): array;    // Restores the object state from the given data array.  public function __unserialize(array $data): void;  

其他

  • 弱引用:允許程序員保留對某個對象的引用,該對象不會阻止該對象被銷毀。
  • __toString中出現的錯誤從可恢復的錯誤轉換為錯誤異常,可被try/catch
  • 添加mb_str_split()函數

參考文檔: https://www.php.net/manual/zh/migration74.new-features.php