2011-08-25 15 views
2

我使用定界符建立一個簡單的文本郵件,但由於某些原因,我讓周圍奇怪的結果我if/else條件:的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 - 如果我改變爲真,我只是得到Hi UsernameGood Bye這更令人費解。

+1

這只是我的意見,但我認爲這不是一個很好的heredoc使用,你會更好使用雙引號 – Ibu

+1

一切都包裝在PHP標籤?你顯示瀏覽器的源代碼是什麼? –

+1

在文件的第一個字符列上肯定是'EOD;'?它不能縮進。 – Treffynnon

回答

6

您的EOD;應該是線上所有的。只有那4個字符。

你沒有爲第一,第三和第四個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; 

圖片澄清:

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

這導致第二EOD和第三EOD之間的所有內容應被認爲是在這裏的文件:)

如果你會使用EOD1,EOD2,EOD3和EOD4,你會得到警告'EOD2未找到'或沿着這些線路。 你不是第一個遇到這個錯誤,PHP HereDoc Manualpage甚至顯示警告(在heredoc endmarker之前有空格)。還有什麼可以補充的確是正確的,正如在manpage上解釋的那樣:「可能」是一個分號。

+0

我認爲有可能省略';'作爲結束標記。但解釋是正確的,+1。 – hakre

+0

好的,謝謝,明白了,將來會有不同的EODs! – Dunhamzzz