我正在使用Heredoc构建简单的文本电子邮件,但是由于某些原因,在if / else条件条件下我得到了奇怪的结果:

<?php
$message = <<<EOD
Hi Username
EOD;

echo $message.'<hr>';

if(true) {
    $message .= <<<EOD
Thanks for logging in
EOD;
} else {
    $message .= <<<EOD
Thanks for signing up.
EOD;
}

echo $message.'<hr>';

$message .= <<<EOD
Good Bye
EOD;
echo '<pre>'.$message.'</pre>';


输出:

Hi UsernameThanks for logging in
EOD;
} else {
    Hi Username .= <<<EOD
Thanks for signing up.  Good Bye


由于某种原因,它输出了我的PHP-如果将true更改为false,我只会得到Hi UsernameGood Bye,这更加令人困惑。

最佳答案

您的EOD;应该是该行上显示的ALL。只有这四个字符。

您对第一个,第三个和第四个EOD;做得很好,但是第二个EOD;在EOD后面有空格;选择代码(或在hexedit中查看或显示空白)以查看:

$message = <<<EOD
Hi Username
EOD;

echo $message.'<hr>';

if(true) {
    $message .= <<<EOD
Thanks for logging in
EOD;
} else {
    $message .= <<<EOD
Thanks for signing up.
EOD;
}

echo $message.'<hr>';

$message .= <<<EOD
Good Bye
EOD;
echo $message;


图片说明:



这使得第二个EOD和第三个EOD之间的所有内容都被视为此处文档:)

如果您将使用EOD1,EOD2,EOD3和EOD4,则会收到警告“未找到EOD2”或类似内容。
您不是第一个遇到此错误的人,PHP HereDoc Manualpage甚至显示警告(在Heredoc结束标记前带有空格)。 hakre所添加的内容确实是正确的,如联机帮助页中所述:“可能”是一个分号。

关于php - 如果/其他与heredoc的行为不符合预期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7187226/

10-11 19:17