php7.4 将在数组中引入展开运算符

686 阅读1分钟

在PHP的RFC(请求意见稿)投票里,spread_operator_for_array(数组的展开运算符)以压倒性赞成优势被被通过,这个特性将会被加入到PHP7.4里。

展开运算符在PHP5.6里首次被引进,这个RFC扩展了在数组上使用;可以展开支持Traversable的数组和对象。下面是这个RFC的基本例子:

$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
// ['banana', 'orange', 'apple', 'pear', 'watermelon'];

下面是更深入一些的例子:

$arr1 = [1, 2, 3];
$arr2 = [...$arr1]; // [1, 2, 3]
$arr3 = [0, ...$arr1]; // [0, 1, 2, 3]
$arr4 = array(...$arr1, ...$arr2, 111); // [1, 2, 3, 1, 2, 3, 111]
$arr5 = [...$arr1, ...$arr1]; // [1, 2, 3, 1, 2, 3]

function getArr() {
  return ['a', 'b'];
}
$arr6 = [...getArr(), 'c']; // ['a', 'b', 'c']

$arr7 = [...new ArrayIterator(['a', 'b', 'c'])]; // ['a', 'b', 'c']

function arrGen() {
    for($i = 11; $i < 15; $i++) {
        yield $i;
    }
}
$arr8 = [...arrGen()]; // [11, 12, 13, 14]

但是注意这个方式不支持字符串键;你只能使用索引数组,这个RFC的作者解释如下:

为了与参数解包的行为保持一致,字符串键是不支持的。当使用字符串键时,一个可恢复的错误会被抛出来。