正文缩进级别无效(预计缩进级别至少为 4)

and*_*ber 3 php heredoc php-7.3

我刚刚升级到 PHP 7.3,但出现此错误:

Invalid body indentation level (expecting an indentation level of at least 4)
Run Code Online (Sandbox Code Playgroud)

这是代码:

Invalid body indentation level (expecting an indentation level of at least 4)
Run Code Online (Sandbox Code Playgroud)

and*_*ber 8

这是由PHP 7.3 中新的灵活 Heredoc 语法引起的。

在以前的 PHP 版本中,结束标记是不允许有缩进的:

    $string = <<<EOF
Hello
EOF;
Run Code Online (Sandbox Code Playgroud)

从 PHP 7.3 开始,结束标记可以缩进。

在本例中,EOF缩进了 4 个空格。字符串的主体也将从每行的开头剥离 4 个空格。

    $string = <<<EOF
    Hello
    EOF;
Run Code Online (Sandbox Code Playgroud)

如果结束标记比正文的任何​​行缩进得更远,它将抛出解析错误:

    $string = <<<EOF
  Hello
    EOF;
Run Code Online (Sandbox Code Playgroud)

错误消息的原因有两个:

  • 结束标记在正文中缩进超过 1 行或多行

但对于那些升级到 PHP 7.3 的人来说,可能更有可能:

  • 我选择了一个HTML也存在于字符串中的标记。由于现在允许灵活的间距,PHP 错误地检测到字符串在我打算之前已经关闭。