gpt4 book ai didi

php - if/else 与 Heredoc 的行为不符合预期

转载 作者:行者123 更新时间:2023-12-03 23:31:04 25 4
gpt4 key购买 nike

我正在使用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;应该是该行中出现的所有内容。只有那 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;

图像澄清:

http://img803.imageshack.us/img803/826/whitespaceheredoc.png

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

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com