2011-08-25 3 views
2

나는 간단한 텍스트 이메일을 구축 히어 닥을 사용하고 있지만, 어떤 이유로 나는 주위에 이상한 결과를 얻고 내/다른 조건의 경우 :/다른 히어 닥 예상대로 행동하지와 경우

<?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;은 행에있는 ALL이어야합니다. 그 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 사이에있는 모든 원인 here-document :)

EOD1, EOD2, EOD3 및 EOD4를 사용했다면 'EOD2를 찾을 수 없음'또는 그 라인을 따라 경고 메시지가 나타납니다. 처음으로이 오류가 발생하는 것은 아니며 PHP HereDoc Manualpage은 경고를 표시합니다 (heredoc 엔드 마커 앞에 공백이 있음). hakre가 추가 한 것은 정말로 정확합니다. 맨 페이지에서도 설명되었는데, '아마도'세미콜론입니다.

+0

끝 마커에';'를 생략 할 수 있습니다. 그러나 설명은 정확합니다, +1. – hakre

+0

알았어, 고마워, 미래에 내 EOD가 다를거야! – Dunhamzzz

관련 문제