PHP 7.4 在数组表达式中引入 Spread 运算符
自 PHP 5.6 起可用,参数解包是将数组和 Traversable 解包为参数列表的语法。要解压一个数组或 Traversable,必须以 ...(3 点)为前缀,如下例所示:
function test(...$args) { var_dump($args); } test(1, 2, 3);
然而 PHP 7.4 RFC 建议将此功能扩展到数组中去定义:
$arr = [...$args];
Spread 运算符的第一个好处就是性能,RPC 文档指出:
Spread 运算符应该比 array_merge 拥有更好的性能。这不仅仅是 Spread 运算符是一个语法结构,而 array_merge 是一个方法。还是在编译时,优化了高效率的常量数组
Spread 运算符的一个显着优点是它支持任何可遍历的对象,而该 array_merge 函数仅支持数组。
以下是数组中参数带有 Spread 运算符的示例:
$parts = ['apple', 'pear']; $fruits = ['banana', 'orange', ...$parts, 'watermelon']; var_dump($fruits);
如果在 PHP 7.3 或更早版本中运行此代码,PHP 会抛出一个 Parse 错误:
Parse error: syntax error, unexpected '...' (T_ELLIPSIS), expecting ']' in /app/spread-operator.php on line 3相反,PHP 7.4 将返回一个数组
相反,PHP 7.4 将返回一个数组
array(5) { [0]=> string(6) "banana" [1]=> string(6) "orange" [2]=> string(5) "apple" [3]=> string(4) "pear" [4]=> string(10) "watermelon" }