PHP 7.3.0 昨天正式发布了...喜大普奔的消息。
这次发布,带来的最大改变,小编觉得,只有两点
- 灵活的 Heredoc 和 Nowdoc 语法,添加减少缩进的支持
list()
函数的引用赋值
灵活的 Heredoc 和 Nowdoc 语法
PHP 7.3.0 版本改进了 Heredoc 和 Nowdoc 语法,添加减少缩进的支持
比如常见的语法如下
echo <<<END a b c END;
缩进的大小,是跟 END;
相关的,END;
缩进多少,整体就减少缩进多少
因为上面代码的 END;
没有缩进,因此就没有减少缩进,结果输出如下
a b c
如果 END;
缩进了 4 个空格,比如下面的代码
echo <<<END a b c END;
那么最后的输出结果就会减少缩进 4 个空格,输出结果如下
a b c
如果输出的字符串的缩进大小不满足 END;
减少的缩进,那么就会报语法错误
Invalid body indentation level (expecting an indentation at least 5) in %s on line %d
比如下面的代码
echo <<<END a b c END;
很明显可以看出, c
的缩进远远小于 END;
的缩进
还有一些其它语法,大家可以移步 https://wiki.php.net/rfc/flexible_heredoc_nowdoc_syntaxes
list()
函数的引用赋值
list()
函数的引用赋值是什么意思呢?
假设我么有一个数组
$array = [1, 2];
那么我们可以使用 list()
函数来解构这个 $array
数组
list($a, $b) = $array;
这时候,$a
的值就是数组的第一个元素 1
,$b
就是数组的第二个元素 2
但是,任何对 $a
和 $b
的修改,都不会影响到原数组的元素,比如下面的代码
<?php $array = [1, 2]; print_r($array); list($a, $b) = $array; $b = 3; print_r($array);
输出结果如下
Array ( [0] => 1 [1] => 2 ) Array ( [0] => 1 [1] => 2 )
那如果想要 $b
的修改能反应到 $array
数组上,要怎么做呢?
哈,在 PHP 7.3.0 版本之前,只有通过 $array[1]=$b
这个方法,但在 PHP 7.3.0 中
因为为 list()
引进了引用支持,因此,我们可以对 $b
添加一个引用,就像下面这样
<?php $array = [1, 2]; print_r($array); list($a, &$b) = $array; $b = 3; print_r($array);
那么,任何对 $b
的修改都会反馈到 $array
数组中,输出结果如下
Array ( [0] => 1 [1] => 2 ) Array ( [0] => 1 [1] => 3 )
更多内容,可以访问 https://wiki.php.net/rfc/list_reference_assignment
因为时间问题,就不细细讲解了,周末有空我会翻译下这两篇文章