PHP - Heredoc & Nowdoc



PHP 提供了两种替代方案,用于以 **heredoc** 和 **nowdoc** 语法声明单引号或双引号字符串。

  • 单引号字符串不解释转义字符,也不扩展变量。

  • 另一方面,如果您声明一个包含双引号字符本身的双引号字符串,则需要使用“\”符号对其进行转义。**heredoc** 语法提供了一种便捷的方法。

PHP 中的 Heredoc 字符串

PHP 中的 heredoc 字符串非常类似于双引号字符串,但没有双引号。这意味着它们不需要转义引号并扩展变量。

Heredoc 语法

$str = <<<IDENTIFIER
place a string here
it can span multiple lines
and include single quote ' and double quotes "
IDENTIFIER;

首先,以“<<<”运算符开头。在此运算符之后,提供一个标识符,然后换行。字符串本身紧随其后,然后是相同的标识符以关闭引号。字符串可以跨越多行,并包含单引号(')或双引号(")。

结束标识符可以通过空格或制表符缩进,在这种情况下,缩进将从文档字符串中的所有行中去除。

示例

标识符只能包含字母数字字符和下划线,并且必须以下划线或非数字字符开头。结束标识符除了分号(;)之外不应包含任何其他字符。此外,结束标识符之前和之后必须只有换行符。

请看下面的例子 -

<?php  
   $str1 = <<<STRING
   Hello World
      PHP Tutorial
         by TutorialsPoint
   STRING;

   echo $str1;
?>

它将产生以下 **输出** -

Hello World
    PHP Tutorial
        by TutorialsPoint

示例

结束标识符在编辑器中的第一列之后可以包含或不包含缩进。如有任何缩进,都将被删除。但是,结束标识符的缩进不能超过主体中的任何行。否则,将引发 ParseError。请看下面的例子及其输出 -

<?php  
   $str1 = <<<STRING
   Hello World
      PHP Tutorial
   by TutorialsPoint
         STRING;
         
   echo $str1;
?>

它将产生以下 **输出** -

PHP Parse error:  Invalid body indentation level 
(expecting an indentation level of at least 16) in hello.php on line 3

示例

heredoc 中的引号不需要转义,但仍然可以使用 PHP 转义序列。Heredoc 语法还会扩展变量。

<?php  
   $lang="PHP";
   echo <<<EOS
   Heredoc strings in $lang expand vriables.
   The escape sequences are also interpreted.
   Here, the hexdecimal ASCII characters produce \x50\x48\x50
   EOS;
?>

它将产生以下 **输出** -

Heredoc strings in PHP expand vriables.
The escape sequences are also interpreted.
Here, the hexdecimal ASCII characters produce PHP

PHP 中的 Nowdoc 字符串

PHP 中的 nowdoc 字符串类似于 heredoc 字符串,只是它不扩展变量,也不解释转义序列。

<?php  
   $lang="PHP";

   $str = <<<'IDENTIFIER'
   This is an example of Nowdoc string.
   it can span multiple lines
   and include single quote ' and double quotes "
   IT doesn't expand the value of $lang variable
   IDENTIFIER;

   echo $str;
?>

它将产生以下 **输出** -

This is an example of Nowdoc string.
it can span multiple lines
and include single quote ' and double quotes "
IT doesn't expand the value of $lang variable

nowdoc 的语法类似于 heredoc 的语法,只是“<<<”运算符后面的标识符需要用单引号括起来。nowdoc 的标识符也遵循 heredoc 标识符的规则。

Heredoc 字符串就像没有转义的双引号字符串。Nowdoc 字符串就像没有转义的单引号字符串。

广告