在PHP 8中,list()函数的功能发生了变化。具体改变说明如下。
1.不再按照相反的顺序赋值
在PHP 8中,list()函数不再按照相反的顺序赋值,而在PHP 5中,list()函数按照相反的顺序赋值。
【例6.19】
<?php
list($array[], $array[], $array[], $array[]) = [100, 200, 300,400];
var_dump($array);
?>
在PHP 8版本中,运行结果如图6-22所示。在PHP 5版本中,运行结果如图6-23所示。
从结果可以看出,虽然赋值没有变化,但是赋值的顺序发生了变化。在PHP 8中,返回的数组$array == [100, 200, 300,400]。在PHP 5中,返回的数组$array ==[400, 300,200,100]。
2.不再允许赋空值
在PHP 8中,list()不允许赋空值。
例如下面的代码都会报错:
list() = $a;
list(,,) = $a;
list($x, list(), $y) = $a;
而在PHP 5中,list()是允许赋空值的。
3.不再支持字符串拆分功能
在PHP 8中,list()函数不再支持字符串拆分功能。
【例6.20】
<?php
$string = "xy";
list($x, $y) = $string;
each "$x";
each "$y";
?>
在PHP 8中,运行报错信息如图6-24所示。
在PHP 5中,上述代码最终的结果是:$x == “x” and $y == “y”。运行结果如图6-25所示。
4.可以用于数组对象
在PHP 8中,list()也适用于数组对象。
【例6.21】
<?php
list($a, $b, $c) = (object) new ArrayObject([100, 200, 300]);
echo "$a<br/>";
echo "$b<br/>";
echo "$c";
?>
在PHP 8中,上述代码最终的结果是:$a == 100 and $b == 200 and $c ==300。运行结果如图6-26所示。
在PHP 5中,上述代码最终的结果是:$a == null and $b == null and $c ==null(不会有提示)。运行结果如图6-27所示。