我正在使用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/