PHP代码语法
我试图在PHP中的print语句中插入内联if,但找不到正确的语法 我想做的是这样的: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
$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';
因为有更少的错误倾向和更具可读性的解决方案,那么评论应该是“有更好的方法来做”(也许还有一些解释),而不是“只是不要做”。这是一个巨魔评论…你可以在中找到更多关于三元运算符的问答