【箭头函数捕获的是变量的值快照,不是引用】 $counter = 5;$inc = fn() => $counter++;$inc();var_dump($counter); // 输出 5,未改变 $counter = 5;$inc = function() use (&$counter) { $counter++; };$inc();var_dump($counter); // 输出 6

整理PHP 7.4箭头函数笔记时,需紧扣其语法特性、作用域行为与典型误用场景,避免堆砌概念或照搬文档式罗列,确保每条记录都能直接支撑编码决策。
按核心机制分块归类
把笔记拆成「语法骨架」「变量捕获」「适用边界」「避坑实录」四类,不按章节编号,也不按知识库原文顺序。比如“fn($x) => $x * 2”必须和“自动继承$factor”写在同一区块,因为二者是不可分割的语义单元;而“不能含yield”要单独成块——它不是语法细节,而是硬性限制,漏掉会导致运行时报错。
每个区块只保留1~3个真实有效的代码片段,全部来自你当天调试过的实际用例。删掉所有“例如:”“假设我们有…”这类虚拟示例。
变量捕获部分必须标注值传递本质
在“变量捕获”区块开头直接写:【箭头函数捕获的是变量的值快照,不是引用】。紧接着贴两行对比代码:
$counter = 5;
$inc = fn() => $counter++;
$inc();
var_dump($counter); // 输出 5,未改变
下面空一行,再写传统匿名函数对比:
$counter = 5;
$inc = function() use (&$counter) { $counter++; };
$inc();
var_dump($counter); // 输出 6
不解释“为什么”,只让结果自己说话。这个对比能立刻暴露初学者最常踩的坑:以为箭头函数能修改外部变量。
适用边界用表格+禁用标记明确划线
建一个极简表格,只列三行:
| 场景 | 能否用箭头函数 | 原因 |
|---|---|---|
| array_map中做简单计算 | ✅ 可以 | 单表达式,自动捕获外部因子 |
| usort中需多步比较逻辑 | ❌ 不行 | 含if/else语句块,语法不支持 |
| 需要修改父作用域变量 | ❌ 不行 | 只读捕获,修改无效 |
表格后加一句:别试图给箭头函数加花括号写多行——PHP会直接报Parse error。
避坑实录按错误类型排序
第一步:复制粘贴报错信息(如“SyntaxError: unexpected token '=>'”),然后写触发条件——通常是PHP版本低于7.4;
第二步:记录内存泄漏现象——比如CLI脚本跑久了内存不释放,最后定位到某个箭头函数里引用了$bigArray;
第三步:记下$this绑定异常案例——在类方法内定义箭头函数访问$this->prop却得到null,原因是该箭头函数定义在静态上下文中。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











