PHP - 箭头( Arrow )函数



箭头( Arrow )函数是在 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

将 Arrow(箭头)函数用作回调函数

我们还可以将箭头函数用作回调函数。回调函数用作另一个函数的参数之一。箭头函数是动态执行的,“=>”后面的表达式的值成为父函数的参数,该函数可以是内置函数,也可以是用户定义的函数。

在这个例子中,我们在 usort() 函数中使用了一个箭头函数,这是一个 built_in 函数,它使用用户定义的比较函数按值对数组进行排序。

<?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

就像匿名函数一样,箭头函数语法允许任意函数签名,包括参数和返回类型、默认值、可变参数以及按引用传递和返回。