PHP Heredoc字符串规则

时间:2011-09-28 09:49:33

标签: php string heredoc

有人可以在这里探讨使用示例PHP代码片段在PHP中使用heredoc的复杂性吗? ,根据手册下面的说法?

php.net手册说:

  

非常重要的是要注意,带有结束标识符的行必须不包含其他字符,除了可能是分号(;)。这尤其意味着标识符可能没有缩进,并且在分号之前或之后可能没有任何空格或制表符。同样重要的是要认识到结束标识符之前的第一个字符必须是本地操作系统定义的换行符。这在UNIX系统上是\n,包括Mac OS X.结束分隔符(可能后面跟一个分号)后面也必须跟一个换行符。

     

如果此规则被破坏且结束标识符不是“干净”,则不会将其视为结束标识符,PHP将继续查找。如果在当前文件结束之前未找到正确的结束标识符,则会在最后一行产生解析错误。

     

Heredocs不能用于初始化类属性。从PHP 5.3开始,此限制仅对包含变量的heredoc有效。

以下是php手册的链接:http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc

4 个答案:

答案 0 :(得分:8)

这是一个简单的用途:

$bar = "stackoverflowpro";
$foo = <<<HTML
<p>Hello $bar</p>
HTML;

答案 1 :(得分:7)

echo <<< _html

... some html code here ...

_html;

重要的是,结束标记与“&lt;&lt;&lt;&lt;&lt;”之后的定义完全相同并且结束标记没有缩进(没有标签,完全粘在左边),并且被“;”关闭。

注意:“_”不是必需的,但我用它来表示更好的是正在关闭的heredoc。

答案 2 :(得分:5)

关闭heredoc标识符在行首和标识符之间不能有任何字符,之后可能会有一个;,并且之后不能有任何其他字符。如果标识符缩进,则必须将其视为heredoc字符串的一部分。在换行符之前可能出现的唯一字符是;。您甚至不能在标识符和;之间或;和换行符之间包含任何空格。这意味着如果在函数调用中使用heredoc,则必须在结束标识符之后(即在任何,)之前等)插入换行符。

换句话说,唯一可以出现在具有结束标识符的行上的是标识符本身,并且可选地在标识符之后紧跟一个分号(;)。下一个chararcter(如果不是文件结尾)必须是运行PHP的操作系统的有效换行符。

这是一个有效的heredoc字符串:

$text = <<<EOT
Hello!
EOT;

此heredoc字符串尚未关闭且  EOT;被视为字符串的一部分:

  $text = <<<EOT
  Hello!
  EOT;

上一个例子已修复:

  $text = <<<EOT
  Hello!
EOT;

函数调用中的heredoc(注意);必须出现在新行上才能工作):

print(<<<EOT
Hello!
EOT
);

与上面相同的非常奇怪的缩进(请注意,结束标识符行上唯一的东西是标识符和换行符)。 Hello!在字符串中将有五个空格:

           print(<<<EOT
     Hello!
EOT
                     );

答案 3 :(得分:0)

只需刷新讨论即可。从PHP版本开始。 7.3及更高版本在HEREDOC语法中有一些新规则:

不再需要文档字符串的结束标记 其次是分号或换行符。另外,结束标记 可以缩进,在这种情况下,缩进将被删除 文档字符串中的所有行。

查看文档:{​​{3}}

在这里尝试:https://www.php.net/manual/en/migration73.new-features.php