PHP 7.3.0 中 heredoc 和 nowdoc 语法更新,带来更灵活的语法结构

yufei       6 年 前       1444

哈哈,今天来填坑了,前几天 PHP 7.3.0 正式发布了,除了两个重大的更新,其它看起来都是 bug 修复。前几天很草率的写了一些简单的介绍 : PHP 7.3.0 昨天正式发布了...喜大普奔的消息

本文,我们就来谈论下 PHP 7.3.0 带来的 heredoc 和 nowdoc 语句的语法更新

PHP 中的 heredoc 和 nowdoc 的语法 一直比较严格,而且比较难记,这会让很多开发者避而远之,比如说我,我好像好多年都没用过 heredoc 和 nowdoc 字符串了。

比如说闭合缩进符一定要在新行,不然会当作字符串的一部分,且必然会报错

<?php

echo <<<EOT
Hello 简单教程\nEOT;

报错如下

Parse error: syntax error, unexpected end of file, expecting variable (T_VARIABLE) or heredoc end (T_END_HEREDOC) or ${ (T_DOLLAR_OPEN_CURLY_BRACES) or {$ (T_CURLY_OPEN) in /Users/yufei/Downloads/demo.php on line 4

另一方面,语法格式非常难看,比如下面的代码

<?php

class demo {

    public function greeting()
    {
        echo <<<EOT
Hello 简单教程\n
EOT;
    }
}

(new demo())->greeting();

本来好好的缩紧,就这样被一个 heredoc 给毁了,那个恨啊....

而 PHP 7.3.0 的这次更新,针对的就是这糟糕的 heredoc 和 nowhere 的可读性问题。作出了以下两个更改

  1. 支持闭合标记符的缩进;
  2. 不再强制闭合标记符的换行;

支持闭合标记符的缩进

支持闭合标记符的缩进 的意思就是,heredoc 字符串的缩进和闭合标记符的缩进对齐,闭合标记符缩进多少,字符串就缩紧多少

例如上面的范例,我们可以改成如下

<?php

class demo {

    public function greeting()
    {
        echo <<<EOT
        Hello 简单教程\n
        EOT;
    }
}


(new demo())->greeting();

输出结果如下

Hello 简单教程

闭合标记的缩进决定了 heredoc / nowdoc 中每个新行的空格的数量。例如下面的代码

<?php

// 4 个缩进空格
echo <<<END
      a
     b
    c
    END;

输出结果如下

  a
 b
c

不再强制闭合标记符的换行

在 PHP 7.2 的当前实现中, 必须存在一个新行来结束 heredoc/nowdoc。 PHP 7.3 移除了这个约束

<?php

class demo {

    public function greeting()
    {
        echo <<<EOT
        Hello 简单教程\n
        EOT,"我爱你\n";
    }
}


(new demo())->greeting();

输出结果如下

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

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

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