19新版教育培训风格演示站

标题: 一文看懂 PHP 7.3 更新 [打印本页]

作者: DeJay王健    时间: 2019-1-11 12:12
标题: 一文看懂 PHP 7.3 更新
PHP 目前依旧是其它脚本语言强劲的竞争对手,这主要归功于其核心维护团队的快速更新。

[attach]48[/attach]

自从PHP 7.0 发布以来,社区见证了许多新特性的诞生,极大地改进了开发者在项目中应用 PHP 的方式。提高 PHP 应用的性能和安全性,是这些改进的主要目的。

PHP 最近实现了又一个里程碑 —— 发布 PHP 7.3。新版本带来了一些急需的更新。

在本文中,我将论述新推出的 PHP 7.3 特性 和更新。好消息是,你可以在你的测试服务器上自行安装新版本、查看新功能。但老生常谈,切勿在生产服务器上使用 RC 版本更新,可能会破坏你已经上线的应用。

以下是7.3版中引入的一些更新,与以前的版本相比,它们大大提高了 PHP7.3 的性能
让我们逐一讨论上述的每一个更新。
灵活的 Heredoc 和Nowdoc 语法

Heredoc Nowdoc 语法能够在使用多行长字符串时起到很大帮助。它要求结束标识符应当为出现在新行的首个字符串。

  1. // 除了这样:

  2. $query = <<<SQL

  3. SELECT *

  4. FROM `table`

  5. WHERE `column` = true;

  6. SQL;

  7. // 这样也可以:

  8. $query = <<<SQL

  9.    SELECT *

  10.    FROM `table`

  11.    WHERE `column` = true;

  12.    SQL;
复制代码



总的来说,此更新提出了两项改进,如下:
在上面的例子里,可以很容易地看出这些改动。
函数调用中允许尾部逗号

在参数、元素、变量列表结尾,追加尾部逗号。有时我们在数组内以及函数调用(尤其是可变参函数)时需要传递大量元素,若是漏掉一个逗号,便会报错。鉴于如上情况,尾部逗号便显得十分有用。这个特性已经允许在数组内使用,并且从 PHP 7.2 开始,分组命名空间(Grouped Namespaces)语法也开始支持尾部逗号。

  1. use Foo\Bar\{
  2.    Foo,
  3.    Bar,
  4. };

  5. $foo = [
  6.    'foo',
  7.    'bar',
  8. ];
复制代码


当新值需要被追加在此处时,尾部逗号便显得十分实用。在可变参函数例如 unset() 内,更是如此。

  1. unset(
  2.    $foo,
  3.    $bar,
  4.    $baz,
  5. );
复制代码


同时,当你使用 compact() 函数给模版引擎传递一批变量时,也是个能用到的例子。

  1. echo $twig->render(
  2.    'index.html',
  3.    compact(
  4.        'title',
  5.        'body',
  6.        'comments',
  7.    )
  8. );
复制代码


在某些需要构造连续或分组数据情况下,经常要使用 array_merge() 函数合并数组。也可以利用尾部逗号:

  1. $newArray = array_merge(
  2.    $arrayOne,
  3.    $arrayTwo,
  4.    ['foo', 'bar'],
  5. );
复制代码


同样,你也可以在调用任意方法、函数以及闭包时使用此特性。

  1. class Foo
  2. {
  3. public function __construct(...$args) {
  4.    //
  5. }

  6. public function bar(...$args) {
  7.    //
  8. }

  9. public function __invoke(...$args) {
  10.    //
  11. }
  12. }

  13. $foo = new Foo(
  14. 'constructor',
  15. 'bar',
  16. );

  17. $foo->bar(
  18. 'method',
  19. 'bar',
  20. );

  21. $foo(
  22. 'invoke',
  23. 'bar',
  24. );
复制代码









欢迎光临 19新版教育培训风格演示站 (http://47.100.112.22/demo/train/) Powered by Discuz! X3.5