搜尋
首頁頭條令人期待的PHP7.4

令人期待的PHP7.4

Aug 28, 2019 pm 02:20 PM

令人期待的PHP7.4

PHP 7.4 是下一個 PHP 7 的次要版本,預計將於 2019 年 11 月 28 日發佈到 General Availability。讓我們來了解下 PHP 7.4 新增的功能,這將使 PHP 更快,更可靠。

當然,更讓我期待是 PHP 8。因為 JIT 的一些提議,已經獲得批准,這可能成為 PHP 的另一個里程碑。

使用 PHP 7.4 的 PHP 有什麼新功能?

● 支援陣列內解包- 陣列擴充運算子

● 箭頭函數2.0 (更簡短的閉包)

PHP 7.4 在陣列在表達式中引入Spread 運算子

自PHP 5.6 起可用,參數解包是將陣列和Traversable 解包為參數清單的語法。要解壓縮一個數組或Traversable,必須以...(3 點)為前綴,如下例所示:

  function test(...$args) { var_dump($args); }
  test(1, 2, 3);

然而PHP 7.4 RFC 建議將此函數擴展到數組中去定義:

  $arr = [...$args];

Spread 運算子的第一個好處是效能,RPC 文件指出:

Spread 運算子應該比array_merge 擁有更好的效能。這不只是 Spread 運算子是一個語法結構,而 array_merge 是一個方法。還是在編譯時,優化了高效率的常數數組

Spread 運算子的一個顯著優點是它支援任何可遍歷的對象,而該 array_merge 函數僅支援數組。

以下是數組中參數帶有Spread 運算子的範例:

   $parts = ['apple', 'pear'];
  $fruits = ['banana', 'orange', ...$parts, 'watermelon'];
  var_dump($fruits);

如果在PHP 7.3 或更早版本中執行此程式碼,PHP 會拋出一個Parse 錯誤:

Parse error: syntax error, unexpected '...' (T_ELLIPSIS), expecting ']' in /app/spread-operator.php on line 3

相反,PHP 7.4 將傳回一個陣列

array(5) {
    [0]=>
    string(6) "banana"
    [1]=>
    string(6) "orange"
    [2]=>
    string(5) "apple"
    [3]=>
    string(4) "pear"
    [4]=>
    string(10) "watermelon"
  }

RFC 宣告我們可以多次擴充同一個陣列。此外,我們可以在陣列中的任何位置使用 Spread Operator 語法,因為可以在 spread 運算子之前或之後新增常規元素。因此,以下程式碼將按預期工作:

$arr1 = [1, 2, 3];
  $arr2 = [4, 5, 6];
  $arr3 = [...$arr1, ...$arr2];
  $arr4 = [...$arr1, ...$arr3, 7, 8, 9];

也可以將函數傳回的陣列作為參數,放到新數組中:

function buildArray(){
    return ['red', 'green', 'blue'];
  }
  $arr1 = [...buildArray(), 'pink', 'violet', 'yellow'];

PHP 7.4 輸出下列數組:

array(6) {
    [0]=>
    string(3) "red"
    [1]=>
    string(5) "green"
    [2]=>
    string(4) "blue"
    [3]=>
    string(4) "pink"
    [4]=>
    string(6) "violet"
    [5]=>
    string(6) "yellow"
  }

我們也可以使用產生器

function generator() {
    for ($i = 3; $i <= 5; $i++) {
        yield $i;
    }
  }
  $arr1 = [0, 1, 2, ...generator()];

但不允許透過引用傳遞的方式。請考慮以下範例:

$arr1 = [&#39;red&#39;, &#39;green&#39;, &#39;blue&#39;];
  $arr2 = [...&$arr1];

如果我們嘗試透過傳遞參考的方式,PHP 會拋出以下Parse 錯誤:

Parse error: syntax error, unexpected &#39;&&#39; in /app/spread-operator.php on line 3

如果第一個陣列的元素是透過引用儲存的,那麼它們也透過引用儲存在第二個陣列中。這是一個例子:

   $arr0 = &#39;red&#39;;
  $arr1 = [&$arr0, &#39;green&#39;, &#39;blue&#39;];
  $arr2 = [&#39;white&#39;, ...$arr1, &#39;black&#39;];

這是我們用PHP 7.4 得到的:

array(5) {
    [0]=>
    string(5) "white"
    [1]=>
    &string(3) "red"
    [2]=>
    string(5) "green"
    [3]=>
    string(4) "blue"
    [4]=>
    string(5) "black"
  }

箭頭函數2.0 (簡短閉包)

#在PHP中,匿名函數被認為是非常冗長且難以實現和難以維護的,RFC 建議引入更簡單,更清晰的箭頭函數(或簡短閉包)語法,這樣我們就可以簡潔地編寫程式碼。

在PHP 7.4 以前:

function cube($n){
    return ($n * $n * $n);
  }
  $a = [1, 2, 3, 4, 5];
  $b = array_map(&#39;cube&#39;, $a);
  print_r($b);

PHP 7.4 允許使用更簡潔的語法,上面的函數可以重寫如下:

$a = [1, 2, 3, 4, 5];
  $b = array_map(fn($n) => $n * $n * $n, $a);
  print_r($b);

目前,由於語言結構,匿名函數(閉包)可以使用use 繼承父作用域中定義的變量,如下所示:

$factor = 10;
  $calc = function($num) use($factor){
    return $num * $factor;
  };

但是在PHP 7.4 中,父級作用域的值是透過隱式捕獲的(隱式按值的作用域進行綁定)。所以我們可以用一行來完成這個函數:

$factor = 10;
  $calc = fn($num) => $num * $factor;

父級作用域定義的變數可以用在箭頭函數,它跟我們使用 use 是等價的,不可能被父級所修改。

新語法是對語言的一個很大改進,因為它允許我們建立更易讀和可維護的程式碼。

NULL 合併運算子

由於日常使用中存在大量同時使用三元表達式和isset () 的情況, 我們新增了null 合併運算子(? ?) 這個文法糖。如果變數存在且值不為 NULL, 它就會傳回自身的值,否則傳回它的第二個運算元。

$username = $_GET[&#39;user&#39;] ?? ‘nobody&#39;;

這段程式碼的作用非常簡單:它取得請求參數並設定預設值(如果它不存在)。但是在 RFC 這個例子中,如果我們有更長的變數名稱呢?

$this->request->data[&#39;comments&#39;][&#39;user_id&#39;] = $this->request->data[&#39;comments&#39;][&#39;user_id&#39;] ?? &#39;value&#39;;

长远来看,这段代码可能难以维护。因此,旨在帮助开发人员编写更直观的代码,这个 RFC 建议引入 null 合并等于运算符 (null_coalesce_equal_operator)??=,所以我们可以敲下面这段代码来替代上面的这段代码:

$this->request->data[&#39;comments&#39;][&#39;user_id&#39;] ??= ‘value’;

如果左侧参数的值为 null,则使用右侧参数的值。

注意,虽然 coalesce 运算符 ?? 是一个比较运算符,但 ??= 它是赋值运算符。

陳述
本文轉載於:learnku。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具