PHP 7.4支持用...展开索引数组为函数参数,要求参数个数严格匹配或配合...$args使用;支持...$arr1, ...$arr2合并展开;不支持关联数组、引用及定义端展开。

PHP 7.4 支持使用展开运算符(...)将数组元素逐个解包为函数参数,前提是该函数接受可变数量的参数(如普通函数、或已声明了 ...$args 的可变参数函数)。
基本用法:把数组展开成独立参数
直接在函数调用时对数组加 ...,PHP 会把数组的每个值作为单独参数传入:
function sum($a, $b, $c) {
return $a + $b + $c;
}
$arr = [10, 20, 30];
echo sum(...$arr); // 输出:60
注意:数组长度必须与函数所需参数个数严格匹配,否则会报致命错误(Fatal error)。
配合可变参数函数(...$args)更灵活
如果函数本身用 ...$args 接收任意个参数,展开传参就非常自然:
立即学习“PHP免费学习笔记(深入)”;
function add(...$numbers) {
return array_sum($numbers);
}
$arr = [5, 15, 25, 35];
echo add(...$arr); // 输出:80
此时数组长度无限制,空数组 [...[]] 也合法(等价于没传参)。
合并多个数组再展开(PHP 7.4+ 支持)
可以用 [...$arr1, ...$arr2] 合并数组,再整体展开:
$a = [1, 2];
$b = [3, 4, 5];
function product(...$nums) {
return array_product($nums);
}
echo product(...$a, ...$b); // 等价于 product(1,2,3,4,5) → 120
echo product(...[...$a, ...$b]); // 同样输出 120
这种写法适合动态拼接参数列表,比如从不同来源收集参数再统一传入。
常见注意事项
- 只能展开 索引数组(数字键),关联数组会展开键名导致不可预期行为(除非你明确需要键名作参数)
- 展开的数组不能包含 引用(PHP 不允许通过 ... 传递引用参数)
- 函数参数有类型声明时,展开后的每个值仍需满足对应位置的类型约束
- 不能在函数定义中使用
...展开(只用于调用端),定义可变参数必须写function foo(...$args)



















