哈哈,今天来填坑了,前几天 PHP 7.3.0 正式发布了,除了两个重大的更新,其它看起来都是 bug 修复。前几天很草率的写了一些简单的介绍 : PHP 7.3.0 昨天正式发布了...喜大普奔的消息
本文,我们就来谈论下 PHP 7.3.0 带来的 list() 函数的引用赋值
list() 函数的引用赋值
list() 函数的引用赋值是什么意思呢?
假设我么有一个数组
$array = [1, 2];
那么我们可以使用 list() 函数来解构这个 $array 数组
list($a, $b) = $array;
这时候,$a 的值就是数组的第一个元素 1,$b 就是数组的第二个元素 2
但是,任何对 $a 和 $b 的修改,都不会影响到原数组的元素,比如下面的代码
<?php $array = [1, 2]; print_r($array); list($a, $b) = $array; $b = 3; print_r($array);
输出结果如下
Array
(
[0] => 1
[1] => 2
)
Array
(
[0] => 1
[1] => 2
)
那如果想要 $b 的修改能反应到 $array 数组上,要怎么做呢?
哈,在 PHP 7.3.0 版本之前,只有通过 $array[1]=$b 这个方法,但在 PHP 7.3.0 中
因为为 list() 引进了引用支持,因此,我们可以对 $b 添加一个引用,就像下面这样
<?php $array = [1, 2]; print_r($array); list($a, &$b) = $array; $b = 3; print_r($array);
那么,任何对 $b 的修改都会反馈到 $array 数组中,输出结果如下
Array
(
[0] => 1
[1] => 2
)
Array
(
[0] => 1
[1] => 3
)
这个 list() 功能类似于
<?php $array = [1, 2]; $a = $array[0]; $b =& $array[1];
同时,也有点类似于数组赋值方法
$array = [1, 2]; [$a, &$b] = $array; $b = 3; print_r($array);
list() 函数的引用赋值还支持嵌套模式
<?php $array = [1, 2, 3, [3, 4]]; list(&$a, $b,, list(&$c, $d)) = $array; var_dump($array);
运行结果如下
array(4) {
[0]=>
&int(1)
[1]=>
int(2)
[2]=>
int(3)
[3]=>
array(2) {
[0]=>
&int(3)
[1]=>
int(4)
}
}
等等,也就是说,引用赋值的行为会改变原数组的值的引用方式?
目前尚无回复