php三元运算符格式化

时间:2011-07-29 23:58:28

标签: 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'] : ''.'"/>');

注意:第15行/srv/www/form.php中的未定义索引:foo

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

将表达式放在括号中:

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

答案 1 :(得分:2)

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'] : '')

答案 2 :(得分:1)

恕我直言,括号(由zerkms建议)使代码无法读取。

相反,请考虑这样的事情:

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