php 7.4 的数组展开运算符(...)用于函数调用传参、数组合并及可变参数接收,要求操作数为数组或可遍历对象,不支持 null 或未定义变量,且仅一维展开、不可用于类属性默认值等静态上下文。

PHP 7.4 引入了数组展开运算符(...),它允许你将一个数组“展开”为多个独立元素,常用于函数调用、数组合并和参数传递等场景。掌握它的使用边界和常见陷阱,能让你写出更简洁、可读性更强的代码。
函数调用时展开数组作为参数
当函数接受多个独立参数,而你手头是一个数组时,展开运算符可以替代 call_user_func_array():
-
// 传统方式
array_sum(call_user_func_array('array_merge', $arrays)); -
// 使用展开运算符(更直观)
array_sum(array_merge(...$arrays));
注意:被展开的变量必须是数组或可遍历对象;否则会报 Fatal error: Uncaught TypeError。
Delphi 7应用编程150例 CHM全书内容下载,全书主要通过150个实例,全面、深入地介绍了用Delphi 7开发应用程序的常用方法和技巧,主要讲解了用Delphi 7进行界面效果处理、图像处理、图形与多媒体开发、系统功能控制、文件处理、网络与数据库开发,以及组件应用等内容。这些实例简单实用、典型性强、功能突出,很多实例使用的技术稍加扩展可以解决同类问题。使用本书最好的方法是通过学习掌握实例中的技术或技巧,然后使用这些技术尝试实现更复杂的功能并应用到更多方面。本书主要针对具有一定Delphi基础知识
合并多个数组(替代 array_merge)
展开运算符可用于字面量数组合并,语法更接近 JavaScript 的 spread:
立即学习“PHP免费学习笔记(深入)”;
$a = [1, 2]; $b = [3, 4]; $c = [...$a, ...$b, 5]; // [1, 2, 3, 4, 5]- 支持混合字面量与变量:
[...'abc', ...$nums, 99](字符串会被拆成字符数组) - 不支持非数组类型直接展开,如
...null或...$undefined会触发错误
在函数定义中接收可变参数(与 unpack 对应)
展开运算符在函数调用端“展开”,在定义端则用 ... 收集参数(称为“可变参数列表”):
function sum(...$numbers) { return array_sum($numbers); }- 调用
sum(1, 2, 3)等价于传入[1, 2, 3]给$numbers - 可与其他具名参数共存,但必须放在最后:
function logMsg($level, ...$args)
注意事项与常见坑
- 只支持一维展开:
[...[[1,2], [3,4]]]得到[[1,2], [3,4]],不是扁平化结果(要扁平化需用array_merge(...$arr)或递归处理) - 键名在数值索引数组中保持顺序,在关联数组中展开后键名保留,但重复键会被覆盖(后出现的覆盖先出现的)
- 不能在类属性默认值、const 表达式或静态上下文中使用展开运算符










