箭头( 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
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
Result of nested arrow functions: 51
就像匿名函数一样,箭头函数语法允许任意函数签名,包括参数和返回类型、默认值、可变参数以及按引用传递和返回。