我正在使用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
,这更令人费解。
答案 0 :(得分:6)
您的EOD;
应该是该行上的所有内容。只有那4个字符。
你对第一个,第三个和第四个EOD;
做得很好,但第二个EOD;
在EOD背后有空白;选择代码(或以十六进制显示或显示空格的视图)以查看:
$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之间的所有内容被视为here-document:)
如果您使用过EOD1,EOD2,EOD3和EOD4,则会收到警告“未找到EOD2”或其他类似的警告。 您不是第一个遇到此错误的人,PHP HereDoc Manualpage甚至会显示警告(在heredoc endmarker之前有空格)。 hakre添加的内容确实是正确的,正如联机帮助页中所解释的那样:'可能'是一个分号。