PHP代码语法

PHP代码语法,php,syntax,Php,Syntax,我试图在PHP中的print语句中插入内联if,但找不到正确的语法 我想做的是这样的: $a = 1; $b = 1; print('pretext ' .($a == $b) ? 'texta' : 'textb'. ' posttext'); print ('pretext ' .($a == $b)) ? 'texta' : ('textb'. ' posttext') 但是当它应该打印时,它只打印texta,pretext texta posttext试试看 print('prete

我试图在PHP中的print语句中插入内联if,但找不到正确的语法

我想做的是这样的:

$a = 1;
$b = 1;
print('pretext ' .($a == $b) ? 'texta' : 'textb'. ' posttext');
print ('pretext ' .($a == $b)) ? 'texta' : ('textb'. ' posttext')
但是当它应该打印时,它只打印
texta
pretext texta posttext
试试看

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

这里的其他答案解决了您的问题,因此我将解释为什么您的代码不起作用

当前代码的问题在于其隐含的执行顺序。评估过程如下:

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

您可以看到,
'pretext'
正在与一个布尔值(经过字符串化,该值为
1
或空白)连接,然后进行检查。由于非空字符串的计算结果总是为true(因为
'pretext'
),因此您会得到
'texta'
。还请注意,最后两个字符串作为表达式的一部分连接在

后面,您的代码实际上意味着

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

print('pretext ' . (($a == $b) ? 'texta' : 'textb') . ' posttext');
但是为什么不使用它来提高可读性呢

printf(
    'pretext %s posttext',
    $a == $b ? 'texta' : 'textb'
);
或者根本不连接,直接发送到标准输出

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

因为有更少的错误倾向和更具可读性的解决方案,那么评论应该是“有更好的方法来做”(也许还有一些解释),而不是“只是不要做”。这是一个巨魔评论…你可以在中找到更多关于三元运算符的问答