哈哈,今天来填坑了,前几天 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 的可读性问题。作出了以下两个更改
- 支持闭合标记符的缩进;
- 不再强制闭合标记符的换行;
支持闭合标记符的缩进
支持闭合标记符的缩进 的意思就是,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 简单教程 我爱你
目前尚无回复