PHP:将if/else更改为一行条件失败.I';I’我想知道为什么


PHP: change if/else to one line conditional fails. I'd like to know why

我有一个正在处理的if/elseSQL返回。如果它是空的,我会显示一个默认值。

<?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

删除分号并在开头添加echo

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

您错误地使用了三元运算符

作为一种语言构造,echo不喜欢出现在?:表达式中。改为:

echo true ? 'foo' : 'bar';

它之所以失败,是因为它用于表达式而非语句。请参阅三元运算符下的php比较运算符。

在表达式的末尾加上;,就可以把它们变成语句。

请参阅:表达式和语句来理解两者之间的区别。

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

构造:

$test ? planA : planB

选择planA或planB中的一个值,即使您无意使用该结果。由于echo没有值,所以它不起作用:

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

如果您想使用这种简单的语法,只需将echo语句替换为print语句即可。

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