PHP:将if / else更改为一行条件失败。我想知道为什么

时间:2012-07-27 11:27:34

标签: php if-statement conditional

我在SQL返回时有一个 if / else 。如果它是空的,我会显示默认值。

<?php 
if($row['imagename']==='')
    {
        echo "placeholder.png";
    }
else 
    {
         echo htmlspecialchars($row['imagename'], ENT_QUOTES, 'UTF-8');
    } ?>

我试图把它全部放在一行,即

<?php ($row['imagename']==='') ? echo "placeholder.png";:echo htmlspecialchars($row['imagename'], ENT_QUOTES, 'UTF-8'); ?>

失败了。

有人可以澄清它失败的原因吗?

TIA

5 个答案:

答案 0 :(得分:9)

删除分号并在开头添加echo

<?php echo ($row['imagename']==='') ? "placeholder.png" : 
      htmlspecialchars($row['imagename'], ENT_QUOTES, 'UTF-8'); ?>

答案 1 :(得分:6)

<?php echo ($row['imagename']==='') ? "placeholder.png" : htmlspecialchars($row['imagename'], ENT_QUOTES, 'UTF-8'); ?>

您正在使用三元运算符

答案 2 :(得分:5)

作为一种语言结构,echo不喜欢使用?:表达式。这样做:

echo true ? 'foo' : 'bar';

答案 3 :(得分:2)

它失败了,因为它意味着与表达式而不是语句一起使用。 请参阅三元运算符下的php comparison operators

通过在表达式的末尾添加;,您可以将它们变成语句。

请参阅:Expressions and statements以了解两者之间的区别。

答案 4 :(得分:1)

print和echo之间的一个区别是print有一个值,而echo没有。

构造:

$test ? planA : planB

选择其中一个值planA或planB,即使您不打算使用结果。由于echo没有价值,因此不起作用:

$test ? echo 'plan A' : echo 'plan B'; // <-- not working

如果你想使用这个简单的语法,只需用echo语句替换你的echo语句。

$test ? print 'plan A' : print 'plan B'; // <-- should work