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

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

广告