哈哈,今天来填坑了,前几天 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) } }
等等,也就是说,引用赋值的行为会改变原数组的值的引用方式?
目前尚无回复