PHP - 箭頭函式



箭頭函式在PHP 7.4版本中引入。箭頭函式提供了一種更簡單、更簡潔的匿名函式編寫語法。在PHP 7.4中,引入了關鍵字“fn”來定義箭頭函式,而不是傳統的“function”關鍵字。

fn (argument_list) => expr
  • =>”符號之後只有一個表示式,它的值是箭頭函式的返回值。

  • 箭頭函式沒有顯式的return語句。

  • 與匿名函式一樣,箭頭函式被賦值給一個變數以便呼叫。

示例

以下示例演示如何在PHP中使用箭頭函式:

<?php
   $add = fn ($a, $b) => $a + $b;

   $x = 10;
   $y = 20; 
   echo " x: $x y: $y Addition: " . $add($x, $y);
?>

它將產生以下輸出

x: 10 y: 20 Addition: 30

使用箭頭函式作為回撥函式

我們也可以使用箭頭函式作為回撥函式。回撥函式用作另一個函式的引數之一。箭頭函式會動態執行,而“=>”後面的表示式的值將成為父函式的引數,父函式可以是內建函式或使用者定義函式。

示例

在這個例子中,我們在`usort()`函式內部使用箭頭函式,`usort()`是一個內建函式,它使用使用者定義的比較函式按值對陣列進行排序。

<?php
   $arr = [10,3,70,21,54];
   usort ($arr, fn ($x , $y) => $x > $y);

   foreach ($arr as $x){
      echo $x . "\n";
   }
?>

它將產生以下輸出

3
10
21
54
70

訪問父作用域中的變數

箭頭函式可以自動訪問父作用域中的變數。與匿名函式不同,不需要“use”關鍵字就可以作為閉包。當表示式中使用的變數在父作用域中定義時,它將隱式地按值捕獲。

<?php
   $maxmarks=300;
   $percent=fn ($marks) => $marks*100/$maxmarks;

   $m = 250;
   echo "Marks = $m Percentage = ". $percent($m);
?>

它將產生以下輸出

Marks = 250 Percentage = 83.333333333333

示例

箭頭函式會自動按值捕獲變數,即使巢狀也是如此。

在下面的例子中,箭頭函式在另一個箭頭函式的表示式部分中定義。

<?php
   $z = 1;
   $fn = fn($x) => fn($y) => $x * $y + $z;
   $x = 5;
   $y = 10; 
   echo "x:$x y:$y \n";
   echo "Result of nested arrow functions: " . ($fn($x)($y));
?>

它將產生以下輸出

x:5 y:10 
Result of nested arrow functions: 51

與匿名函式一樣,箭頭函式語法允許任意函式簽名,包括引數和返回型別、預設值、可變引數,以及按引用傳遞和返回。

廣告