# PHP箭头函数(PHP7.4+):更简洁的闭包写法
在PHP7.4版本中,引入了一个令人期待已久的新特性——箭头函数(Arrow Functions),它为PHP的闭包写法带来了革命性的简化。本文将全面介绍这个新特性,帮助你掌握这种更简洁的闭包写法。
## 一、什么是箭头函数?
箭头函数是一种更简洁的闭包(Closure)写法,使用`fn`关键字代替传统的`function`关键字,并且自动继承父作用域中的变量,无需使用`use`关键字。
基本语法:
```php
fn (参数列表) => 表达式
```
## 二、与传统闭包的对比
### 传统闭包写法
```php
$numbers = [1, 2, 3, 4, 5];
$squared = array_map(function($n) {
    return $n * $n;
}, $numbers);
```
### 箭头函数写法
```php
$numbers = [1, 2, 3, 4, 5];
$squared = array_map(fn($n) => $n * $n, $numbers);
```
可以看到,箭头函数明显更加简洁,去除了不必要的`function`、`return`和花括号。
## 三、箭头函数的特性
1. **自动继承父作用域变量**  
   箭头函数自动继承包含它的作用域中的所有变量,无需使用`use`关键字:
   ```php
   $factor = 10;
   $multiplier = fn($n) => $n * $factor; // 自动获取$factor变量
   ```
2. **单表达式**  
   箭头函数只能包含一个表达式,该表达式的结果将自动返回:
   ```php
   // 正确
   fn($x) => $x * 2;
   
   // 错误,不能包含多条语句
   fn($x) => { $x *= 2; return $x; }
   ```
3. **返回值类型声明**  
   可以像普通函数一样声明返回类型:
   ```php
   $add = fn(int $a, int $b): int => $a + $b;
   ```
4. **参数类型声明**  
   支持参数类型声明:
   ```php
   $length = fn(string $s): int => strlen($s);
   ```
## 四、适用场景
1. **数组操作**  
   与`array_map`、`array_filter`等函数配合使用特别方便:
   ```php
   $users = [...]; // 用户数组
   $names = array_map(fn($user) => $user['name'], $users);
   ```
2. **回调函数**  
   作为回调函数时特别简洁:
   ```php
   usort($products, fn($a, $b) => $a['price'] <=> $b['price']);
   ```
3. **简单计算**  
   简单的数学运算或字符串操作:
   ```php
   $square = fn($x) => $x * $x;
   ```
## 五、注意事项
1. **不能用于复杂逻辑**  
   由于只能包含一个表达式,复杂逻辑仍需使用传统闭包。
2. **变量是值传递而非引用**  
   自动继承的变量是值传递,如需引用传递仍需使用`use`关键字:
   ```php
   $x = 1;
   $fn = fn() => $x++; // 不会改变$x的值
   ```
3. **PHP7.4+特性**  
   只能在PHP7.4及以上版本使用。
## 六、总结
PHP箭头函数为编写简洁的闭包提供了极大的便利,特别是在处理数组操作和简单回调时。虽然它不能完全替代传统闭包,但在适合的场景下能显著提高代码的可读性和简洁性。
你已经在项目中使用箭头函数了吗?欢迎在评论区分享你的使用体验!如果想了解更多PHP新特性,请关注我们的公众号获取更多技术干货。