PHP 7.3.0 list() 函数的引用赋值

yufei       6 年 前       1782

哈哈,今天来填坑了,前几天 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)
  }
}

等等,也就是说,引用赋值的行为会改变原数组的值的引用方式?

目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.