PHP 8 箭头函数(fn() => expr)是 PHP 7.4 引入、8 中成熟的语法糖,专为单表达式闭包设计,自动按值捕获父作用域变量,支持类型声明、默认参数等完整签名,但不支持多语句、修改外部变量、$this 绑定或调试断点。

PHP 8 中的箭头函数(fn () => expr)是 PHP 7.4 引入、在 PHP 8 中全面成熟的核心语法糖,专为简化单表达式闭包而设计。它不是功能增强,而是写法瘦身——去掉 function、去掉 return、自动捕获变量,让高频回调瞬间清爽。
基础写法:一行搞定简单逻辑
箭头函数只接受一个表达式,自动返回其结果,不支持多语句或花括号块。
-
传统写法:
array_map(function($n) { return $n * 2; }, [1,2,3]); -
箭头函数:
array_map(fn($n) => $n * 2, [1,2,3]); - 同理,
array_filter($arr, fn($x) => $x > 10)、usort($items, fn($a, $b) => $a['score'] $b['score'])都可直接替换
变量捕获:不用 use,自动按值继承
父作用域中已定义的变量,在箭头函数内可直接使用,PHP 会隐式按值捕获(相当于自动加了 use ($var))。
- 例如:
$multiplier = 3; $triple = fn($x) => $x * $multiplier;——$multiplier不用声明就能用 - 注意:捕获的是定义时的值,且是只读的;
fn() => $counter++不会改变外部$counter,也不推荐这么写 - 若需修改外部变量,仍得用传统匿名函数 +
&$var引用
支持完整函数签名,不止于“简单”
箭头函数支持类型声明、默认参数、引用传参、静态修饰等,和普通函数一样严谨。
立即学习“PHP免费学习笔记(深入)”;
static fn(string $name): string => strtoupper($name);fn(int $a, int $b = 1): int => $a + $b;fn(array $data) => count($data) > 0 ? reset($data) : null;- 但不能写成
fn() => { echo 'hello'; return true; }—— 花括号和多语句不被允许
什么时候别硬套箭头函数?
它高效简洁,但有明确边界。以下情况请退回传统匿名函数:
- 需要多行逻辑、条件分支、循环或异常处理
- 必须修改外部变量(如
$count++或$list[] = $item) - 要动态绑定
$this(箭头函数不绑定对象上下文,$this不可用) - 需调试断点——部分 IDE 对单行箭头函数的断点支持较弱



















