php7新特性之可以使用 list() 函数来展开实现了 ArrayAccess 接口的对象

597 阅读1分钟

这个问题之前我是没有遇到过的,也说明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的一个重大新特性,要牢记。