灵活的 Heredoc 和 Nowdoc 将在 PHP 7.3 中推出
发布时间:作者: Paul Redmond
在即将发布的 PHP 7.3 版本中,针对 php.net RFC 中提出的 Heredoc 和 Nowdoc 语法进行了更新。更新侧重于改善外观和可读性。
Heredoc 和 Nowdoc 语法具有非常严格的要求。这导致它们在一定程度上被开发人员回避,因为它们在代码中的使用看起来很丑陋,并且会损害可读性。因此,本提案针对当前的 Heredoc 和 Nowdoc 语法提出了两项更改。
- 允许关闭标记进行缩进,以及
- 删除关闭标记后的换行符要求。
截至 PHP 7.2 的当前实现,可能看起来像这个简单的示例:
<?phpclass foo { public $bar = <<<EOTbarEOT;}
在 7.3 中,以下内容有效:
<?phpclass foo { public $bar = <<<EOT bar EOT;}
关闭标记的缩进确定从 Heredoc/Nowdoc 中每个新行中剥离多少空格。
<?php // 4 spaces of indentationecho <<<END a b c END;/* a bc*/
在 PHP 7.2 的当前实现中,必须存在换行符才能终止 Heredoc/Nowdoc。PHP 7.3 删除了此要求。
<?php stringManipulator(<<<END a b cEND); $values = [<<<ENDabcEND, 'd e f'];
Heredoc 和 Nowdoc 背景
Nowdoc 在 PHP v5.3.0 中可用,它与 Heredoc 的区别与双引号字符串与单引号字符串的区别相同。在 Nowdoc 中不会进行任何解析,它在打开标记周围添加了单引号。
<?php $name = 'Example';$str = <<<'EOD'Example of string $namespanning multiple linesusing nowdoc syntax.EOD;
上面的 Nowdoc 输出将是字面字符串:
Example of string $namespanning multiple linesusing nowdoc syntax.
一个 Here Document 定义如下:
在计算中,Here Document(Here-document、Here-text、Heredoc、Hereis、Here-string 或 Here-script)是文件字面量或输入流字面量:它是源代码文件的一部分,被视为一个单独的文件。该术语也用于一种使用类似语法的多行字符串字面量形式,保留文本中的换行符和其他空白(包括缩进)。
对 Heredocs 和 Nowdocs 的额外关注应使它们在 PHP 中的使用更具可读性,并且由于缩进和以换行符结尾而减少错误。此外,由于根据关闭标记剥离缩进,输出格式将更清晰。
了解更多
您可以阅读关于 灵活的 Heredoc 和 Nowdoc 语法 RFC 的所有详细信息。关于 Heredoc 和 Nowdoc 的 PHP 字符串文档是学习它们以及 PHP 7.2 中当前实现规则的绝佳场所。