本文目录导读:

在 PHP 中,箭头函数(Arrow Functions)是从 PHP 7.4 开始引入的一种更简洁的匿名函数写法,主要特点是自动继承父作用域的变量(不需要写 use)。
基本语法
$variable = fn(参数列表) => 表达式;
对比传统匿名函数
// 传统匿名函数(需要 use 引入外部变量)
$multiplier = 3;
$traditional = function($x) use ($multiplier) {
return $x * $multiplier;
};
// 箭头函数(自动继承 $multiplier)
$arrow = fn($x) => $x * $multiplier;
echo $traditional(5); // 15
echo $arrow(5); // 15
核心特点
自动捕获外部变量(只读)
箭头函数自动继承父作用域的变量,并且不能修改它们:
$count = 0; // 错误!箭头函数不能修改外部变量 $increment = fn() => $count++; // 会报错 // 正确:只能读取 $getCount = fn() => $count;
只能包含单个表达式
箭头函数只能有一个表达式,不能包含多行代码或语句:
// ✅ 正确:单个表达式
$square = fn($n) => $n * $n;
// ❌ 错误:不能使用多行
$complex = fn($n) => {
$result = $n * 2;
return $result + 1;
}; // 会报语法错误
支持类型声明
// 参数类型和返回类型声明 $add = fn(int $a, int $b): int => $a + $b; echo $add(3, 5); // 8
实际应用场景
数组处理(最常用)
$numbers = [1, 2, 3, 4, 5];
// 使用箭头函数简洁地处理数组
$doubled = array_map(fn($n) => $n * 2, $numbers);
print_r($doubled); // [2, 4, 6, 8, 10]
// 过滤
$even = array_filter($numbers, fn($n) => $n % 2 === 0);
print_r($even); // [2, 4]
// 多维数组排序
$users = [
['name' => 'Alice', 'age' => 30],
['name' => 'Bob', 'age' => 25],
];
usort($users, fn($a, $b) => $a['age'] <=> $b['age']);
回调函数
// 排序 $items = ['apple', 'Banana', 'cherry']; usort($items, fn($a, $b) => strcasecmp($a, $b)); // 条件回调 $isAdult = fn($age) => $age >= 18; $ages = [15, 22, 18, 30]; $adults = array_filter($ages, $isAdult);
与闭包结合使用
function createMultiplier($factor) {
// 箭头函数自动继承 $factor
return fn($number) => $number * $factor;
}
$double = createMultiplier(2);
echo $double(5); // 10
$triple = createMultiplier(3);
echo $triple(5); // 15
注意事项
不能修改外部变量
$total = 0; $items = [10, 20, 30]; // ❌ 错误 array_map(fn($item) => $total += $item, $items); // ✅ 正确做法 $total = array_sum($items);
嵌套作用域
$outer = 10; $callback = fn() => fn() => $outer; // 两层都能访问 $outer $inner = $callback(); echo $inner(); // 10
与引用变量的区别
$value = 100;
// 箭头函数捕获的是当前值,不是引用
$arrow = fn() => $value;
$value = 200;
echo $arrow(); // 100(还是原来的值)
// 传统闭包可以通过引用捕获
$closure = function() use (&$value) {
return $value;
};
echo $closure(); // 200
性能建议
箭头函数比传统匿名函数稍微快一点(因为自动绑定作用域),但在大多数应用场景下差异可忽略,优先使用箭头函数来提高代码可读性:
// 不推荐(传统写法,比较啰嗦)
usort($users, function($a, $b) {
return $a['score'] <=> $b['score'];
});
// 推荐(箭头函数,简洁明了)
usort($users, fn($a, $b) => $a['score'] <=> $b['score']);
版本兼容性
- PHP 7.4+:支持箭头函数
- PHP 8.0+:支持从箭头函数内部调用
parent(类继承时) - PHP 8.1+:支持在箭头函数中使用
static
箭头函数最适合用于简单的、单表达式的回调,能把代码写得更简洁优美,对于复杂的多行逻辑,还是使用传统匿名函数或命名函数更合适。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播