PHP - 展开运算符
PHP 将三个点符号 (...) 识别为 spread operator(展开运算符)。该运算符有时也被称为 splat operator(溅射运算符)。该运算符最早在 PHP 7.4 版本中引入。它可以在许多情况下有效使用,例如展开数组。
展开运算符提高了数组和函数参数的可读性。它是现代 PHP 开发中一个简单但实用的特性。
以下是我们将在本章介绍的概念列表及其示例 −
PHP 展开运算符的语法
使用展开运算符展开数组
多次使用展开运算符
展开运算符 vs array_merge()
结合展开运算符使用命名参数
使用展开运算符处理函数返回值
语法
以下是 PHP 展开运算符的语法 −
// 展开数组
$newArray = [...$existingArray];
// 在函数中使用
function myFunction(...$args) {
// 函数体
}
使用展开运算符展开数组
在下面的示例中,$arr1 中的元素被插入到 $arr2 的自身元素列表之后。
<?php $arr1 = [4,5]; $arr2 = [1,2,3, ...$arr1]; print_r($arr2); ?>
输出
这将产生以下结果 −
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
多次使用展开运算符
在表达式中可以多次使用展开运算符。例如,在下面的代码中,通过展开两个数组的元素来创建一个第三个数组。
<?php $arr1 = [1,2,3]; $arr2 = [4,5,6]; $arr3 = [...$arr1, ...$arr2]; print_r($arr3); ?>
输出
这将生成以下结果 −
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 )
展开运算符 vs array_merge()
请注意,可以使用 array_merge() 函数获得相同的结果,如下所示 −
<?php $arr1 = [1,2,3]; $arr2 = [4,5,6]; $arr3 = array_merge($arr1, $arr2); print_r($arr3); ?>
输出
这将产生以下结果 −
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 )
然而,使用 (...) 运算符要高效得多,因为它避免了函数调用的开销。
结合展开运算符使用命名参数
PHP 8.1.0 还引入了另一个特性,允许在展开参数后使用命名参数。与逐个为每个参数提供值不同,数组中的值将被展开到对应的参数中,在数组前使用 ...(三个点)。
<?php
function myfunction($x, $y, $z=30) {
echo "x = $x y = $y z = $z";
}
myfunction(...[10, 20], z:30);
?>
输出
这将导致以下结果 −
x = 10 y = 20 z = 30
使用展开运算符处理函数返回值
在下面的示例中,函数的返回值是一个数组。然后将数组元素展开并解包。
<?php
function get_squares() {
for ($i = 0; $i < 5; $i++) {
$arr[] = $i**2;
}
return $arr;
}
$squares = [...get_squares()];
print_r($squares);
?>
输出
此 PHP 代码的结果为 −
Array ( [0] => 0 [1] => 1 [2] => 4 [3] => 9 [4] => 16 )