PHP 7.3.0 昨天正式发布了...喜大普奔的消息

yufei       5 年, 3 月 前       1668

PHP 7.3.0 昨天正式发布了...喜大普奔的消息。

这次发布,带来的最大改变,小编觉得,只有两点

  1. 灵活的 Heredoc 和 Nowdoc 语法,添加减少缩进的支持
  2. 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

因为时间问题,就不细细讲解了,周末有空我会翻译下这两篇文章

目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.