PHP 的箭头函数(也称为匿名函数或闭包函数)是一种简洁的定义单表达式函数的方法。这种语法是从 PHP 7.4 版本开始引入的,它使得创建简短的一次性使用的函数变得更加方便。
基本语法
箭头函数的基本语法如下:
fn($parameters) => $return_value;这里 $parameters 是一个或多个参数列表,$return_value 是箭头函数返回的值。
示例
- 无参数的箭头函数:
$greeting = fn() => 'Hello, world!';
echo $greeting();  // 输出: Hello, world!- 带参数的箭头函数:
$add = fn(int $a, int $b) => $a + $b;
echo $add(5, 3);  // 输出: 8特性与用法
- 变量作用域: - 箭头函数默认捕获外部作用域中的变量,这意味着你可以在箭头函数内部访问外部作用域中的变量。
- 如果需要修改外部作用域中的变量,可以使用 use关键字显式声明。
 
$x = 10;
$increaseX = fn() use (&$x) => $x++;
echo $increaseX();  // 输出: 11
echo $x;            // 输出: 11- 类型声明: - 可以为箭头函数的参数添加类型声明。
- 同样也可以为返回值添加类型声明。
 
$square = fn(int $n): int => $n * $n;
echo $square(4);  // 输出: 16- 返回对象: - 如果你想返回一个对象,可以直接在箭头函数中创建并返回。
 
$createPoint = fn(int $x, int $y): object => (object)['x' => $x, 'y' => $y];
$point = $createPoint(1, 2);
var_dump($point);  // 输出: object(stdClass)#1 (2) { ["x"]=> int(1) ["y"]=> int(2) }- 错误处理: - 箭头函数也可以抛出异常。
 
$divide = fn(int $a, int $b) => $a / $b ?: throw new Exception('Cannot divide by zero.');
try {echo $divide(10, 0);
} catch (Exception $e) {echo $e->getMessage();  // 输出: Cannot divide by zero.
}- 作为回调函数: - 箭头函数常被用作回调函数,尤其是在数组操作和事件处理中。
 
$array = [1, 2, 3, 4, 5];
$result = array_map(fn($value) => $value * 2, $array);
print_r($result);  // 输出: Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 10 )