为什么这些 Heredoc 和 Nowdoc 会导致错误?

mpy*_*pyw 6 php heredoc nowdoc

我已经找到了一些解决方案,但不知道发生了什么......

示例 1:

<?php

echo <<< EOD
test
EOD;
Run Code Online (Sandbox Code Playgroud)

示例 2:

<?php

echo <<< 'EOD'
test
EOD;
Run Code Online (Sandbox Code Playgroud)

输出 1,2:

PHP 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)
Run Code Online (Sandbox Code Playgroud)

示例 3:

<?php

echo <<< EOD
test
EOD;

?>
Run Code Online (Sandbox Code Playgroud)

示例 4:

<?php

echo <<< 'EOD'
test
EOD;

?>
Run Code Online (Sandbox Code Playgroud)

示例 5:

<?php

echo <<< EOD
test
EOD;
'dummy';
Run Code Online (Sandbox Code Playgroud)

示例 6:

<?php

echo <<< 'EOD'
test
EOD;
'dummy';
Run Code Online (Sandbox Code Playgroud)

输出 3、4、5、6:

test
Run Code Online (Sandbox Code Playgroud)

Mar*_*c B 6

在前两个示例中,您可能在终止符之后有空格,例如

EOD;[space]
Run Code Online (Sandbox Code Playgroud)

有了这个:

<?php
echo <<<EOL
test
EOL;[space]
Run Code Online (Sandbox Code Playgroud)

我收到您的错误消息,但没有空格,就没有错误。无论是否关闭,这都是正确的?>。

  • 看来是**ideone**的问题...工作 http://ideone.com/9kpACT 失败 http://ideone.com/LsRcqp 还是谢谢你!! (4认同)

小智 5

结束定界符必须从第一列开始,它前面不允许有空格或制表符。请注意,事情在 5.5 和 5.6 中发生了变化

'EOD'等价于echo ' ',
"EOD"等价于echo " "变量替换。

结束定界符不带任何单引号。