产生上面变化的原因正是因为在 PHP5 的赋值过程中,3 会最先被填入数组,1 最后,但是现在顺序改变了。
同样的变化还有:
1
2
3
4
5
6
|
<?php $a = [1, 2]; list($a, $b) = $a; // PHP5: $a = 1, $b = 2 // PHP7: $a = 1, $b = null + "Undefined index 1" |
这是因为在以前的赋值过程中 $b 先得到 2,然后 $a 的值才变成 1,但是现在 $a 先变成了 1,不再是数组,所以 $b 就成了 null。
list 现在只会访问每个偏移量一次:
1
2
3
4
5
6
7
8
9
10
11
12
|
<?php list(list($a, $b)) = $array; // PHP5: $b = $array[0][1]; $a = $array[0][0]; // PHP7: // 会产生一个中间变量,得到 $array[0] 的值 $_tmp = $array[0]; $a = $_tmp[0]; $b = $_tmp[1]; |
空的 list 成员现在是全部禁止的,以前只是在某些情况下:
1
2
3
4
|
<?php list() = $a; // 不合法 list($b, list()) = $a; // 不合法 foreach ($a as list()) // 不合法 (PHP5 中也不合法) |
引用赋值的顺序
引用赋值的顺序在 PHP5 中是从右到左的,现在时从左到右:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<?php $obj = new stdClass; $obj->a = &$obj->b; $obj->b = 1; var_dump($obj); // PHP5: object (stdClass)#1 (2) { [ "b" ] => & int (1) [ "a" ] => & int (1) } // PHP7: object (stdClass)#1 (2) { [ "a" ] => & int (1) [ "b" ] => & int (1) } |