VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > 简明python教程 >
  • 新抽象语法树(AST)给 PHP7 带来的变化(2)

  

产生上面变化的原因正是因为在 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)
}

相关教程