这个问题之前我是没有遇到过的,也说明php使用的还是不精啦。
下面使用php官方手册中的实例来说明一下:
$info = array('coffee', 'brown', 'caffeine');
list($a[0], $a[1], $a[2]) = $info;
var_dump($a);
复制代码
以上代码,在php5.6版本下输出结果是这样的:
array(3) {
[2]=>
string(8) "caffeine"
[1]=>
string(5) "brown"
[0]=>
string(6) "coffee"
}
复制代码
而在php7.4版本下输出结果又是这样的:
array(3) {
[0]=>
string(6) "coffee"
[1]=>
string(5) "brown"
[2]=>
string(8) "caffeine"
}
复制代码
从上述输出结果中,可以看出,$a的数组结果完全相反的,php官方手册上有这样一句话:
所以,php7中算是修复了这一问题,而php7是如何修复的呢?php7中引入了AST抽象语法树,这也是php7的一大新特性。AST的概念后续再说了,比较复杂。
同时,这里再说明一点,现在我的版本是php7.4.4,这个版本下list还支持如下简洁操作:
[$a, $b, $c] = ['a', 'b', 'c'];
复制代码
这个操作是从7.1版本开始的,每个版本都会有新的变化,可以定期关注下。而上述所说的list() 函数来展开实现了 ArrayAccess 接口的对象是php5到php7的一个重大新特性,要牢记。