PHP 7.4箭头函数仅支持单个表达式,空数组[]本身是合法表达式,可直接返回如fn()=>[];但赋值语句或花括号块语法不被允许,复杂逻辑应改用传统匿名函数。

PHP 7.4 引入的箭头函数(Arrow Function)是一种简洁的闭包语法,但它不支持在函数体中直接写空数组 [] 作为独立语句——因为箭头函数只允许单个表达式(expression),而 [] 单独出现时是合法表达式,但若你意图“定义并返回空数组”,必须确保它处于返回位置且语法完整。
箭头函数中正确返回空数组
箭头函数的语法为 fn(参数) => 表达式,整个右侧必须是一个可求值的表达式。空数组 [] 本身就是一个表达式,因此可以直接返回:
fn() => [] // ✅ 正确:返回一个空数组 fn($x) => [$x] // ✅ 正确:返回含一个元素的数组 fn() => [1, 2, 3] // ✅ 正确:返回预设数组
常见错误是试图在箭头函数中“执行”初始化操作,例如:
fn() => $arr = []; // ❌ 语法错误:赋值语句不是表达式(PHP 7.4 不支持)
fn() => { return []; } // ❌ 错误:箭头函数不允许花括号块语法需要逻辑处理时的替代方案
如果你需要基于条件生成空数组(比如过滤后无结果),仍需保持右侧为单一表达式。可借助三元运算符或内置函数:
立即学习“PHP免费学习笔记(深入)”;
-
fn($items) => array_filter($items) ?: []—— 过滤后为空则返回空数组 -
fn($x) => $x > 0 ? [$x] : []—— 条件决定是否包含元素 -
fn() => (function() { return []; })()—— 不推荐,绕路且失去箭头函数意义
与传统匿名函数对比说明
传统 function() { return []; } 支持语句块和多行逻辑,适合复杂初始化;而箭头函数追求极简表达。若你发现必须写 $arr = []; 或循环填充,就该换用匿名函数:
// ✅ 适合用传统匿名函数的场景
$builder = function() {
$arr = [];
for ($i = 0; $i < 3; $i++) {
$arr[] = $i * 2;
}
return $arr;
};作用域与变量捕获注意事项
箭头函数自动继承父作用域变量(隐式 use),无需手动声明。这对构造依赖外部数据的数组很便利:
$prefix = 'item_'; $makeArray = fn($id) => [$prefix . $id]; // 自动捕获 $prefix var_dump($makeArray(5)); // ⇒ ['item_5']
但注意:不能在箭头函数内修改父变量(仅读取),且不能捕获未定义变量,否则报错。



















