2011-07-29 53 views
1

這工作:PHP三元操作格式化

<input type="text" name="foo" value="<?php echo isset($_POST['foo']) ? $_POST['foo'] : '' ?>"/> 

這不:

echo('<input type="text" name="foo" value="'.isset($_POST['foo']) ? $_POST['foo'] : ''.'"/>'); 

注意:未定義指數:FOO在/srv/www/form.php第15行

謝謝你的幫助。

回答

1

PHP's operator precedence rules使評估如下您的第二個例子:

echo(
    ('<input type="text" name="foo" value="'.isset($_POST['foo'])) 
    ? $_POST['foo'] 
    : (''.'"/>') 
); 

這不會讓有很大的意義在幾個方面。並且由於isset()的結果基本上被忽略,所以總是試圖打印$_POST['foo']。當然,當它沒有被設置時,會導致通知。

圍繞實際的三元表達式添加括號。即

(isset($_POST['foo']) ? $_POST['foo'] : '') 
+0

很好的解釋,謝謝! – spaghettiwestern

2

把表達在括號:

echo('<input type="text" name="foo" value="'. (isset($_POST['foo']) ? $_POST['foo'] : '') .'"/>'); 
+0

謝謝一堆。 – spaghettiwestern

1

IMHO,括號(如由zerkms建議的)使得代碼不可讀。

相反,認爲像這樣:

$value = isset($_POST['foo']) ? $_POST['foo'] : ''; 
echo '<input type="text" name="foo" value="'. $value .'"/>';