2011-01-07 25 views
0

PHPのprint文の中にインラインを挿入しようとしていますが、正しい構文が見つからない。私がやろうとしている何PHPコードの構文

は次のようなものです:

$a = 1; 
$b = 1; 
print('pretext ' .($a == $b) ? 'texta' : 'textb'. ' posttext'); 

しかし、それは

$a = 1; 
$b = 1; 
print('pretext ' . (($a == $b) ? 'texta' : 'textb') . ' posttext'); 
+0

ちょうどそれをしないでください。 –

+0

@ Col.Shrapnelなぜですか? –

+1

エラーが発生しにくく、読みやすい解決策が少ないため、 – Gordon

答えて

3

あなたのコードが効果的に

print('pretext ' . ($a == $b) ? 'texta' : 'textbposttext'); 

を意味あなたは

print('pretext ' . (($a == $b) ? 'texta' : 'textb') . ' posttext'); 

しかし、なぜ可読性

printf(
    'pretext %s posttext', 
    $a == $b ? 'texta' : 'textb' 
); 

またはいけない、まったく連結し、stdoutに直接送信を高めるためにprintfを使用しないを行うことができます

echo 'pretext ', 
    $a == $b ? 'texta ' : 'textb ', 
    'posttext'; 
+0

+1 'printf()'の場合 – BoltClock

3
print('pretext ' . (($a == $b) ? 'texta' : 'textb') . ' posttext'); 
2

を印刷しなければならないとき、それはちょうどtextaを印刷します他の答えはここであなたの問題を解決するので、私はなぜあなたのコードisn '働いている。

現在のコードの問題は、暗黙の実行順序です。このように評価されています:

print ('pretext ' .($a == $b)) ? 'texta' : ('textb'. ' posttext') 

あなたは'pretext'は(1またはブランクのいずれかである、文字列化、)ブール値を連結した後、確認されていることがわかります。空でない文字列は常に('pretext'のために)真と評価されるので、'texta'となります。また、最後の2つの文字列がの後のの一部としての一部として連結されていることにも注意してください。

2

てみpretext texta posttext

+0

+1でご覧いただけます – Gordon