Php 三元运算符和字符串连接怪癖?

Php 三元运算符和字符串连接怪癖?,php,ternary-operator,string-concatenation,Php,Ternary Operator,String Concatenation,嗨,我只是想知道为什么这段代码会产生(至少对我来说)错误的结果 可能是我的错 $description = 'Paper: ' . ($paperType == 'bond') ? 'Bond' : 'Other'; 我猜如果paperType等于“Bond”,那么说明就是“Paper:Bond”,如果paperType不等于“Bond”,那么说明就是“Paper:Other” 但当我运行这段代码时,结果是描述为“Bond”或“Other”,然后离开了我 想知道绳子“纸”去了哪里 $descr

嗨,我只是想知道为什么这段代码会产生(至少对我来说)错误的结果

可能是我的错

$description = 'Paper: ' . ($paperType == 'bond') ? 'Bond' : 'Other';
我猜如果paperType等于“Bond”,那么说明就是“Paper:Bond”,如果paperType不等于“Bond”,那么说明就是“Paper:Other”

但当我运行这段代码时,结果是描述为“Bond”或“Other”,然后离开了我 想知道绳子“纸”去了哪里

$description = 'Paper: ' . ($paperType == 'bond' ? 'Bond' : 'Other');

尝试添加括号,使字符串按正确顺序连接到字符串。

它与运算符优先级有关。您必须执行以下操作:

$description = 'Paper: ' . (($paperType == 'bond') ? 'Bond' : 'Other');

我想每个人都给出了解决方案,我想为这个意外的结果提供原因

首先,您可以检查原点以及操作符的计算方式(左、右、关联等)

现在我们来分析一下你的句子

$ paperType = 'bond';
$ description = 'Paper:'. ($ paperType == 'bond')? 'Bond': 'Other';
1) 我们查看该表,发现先计算括号,然后计算“.”(串联),最后计算三元运算符“?”,因此我们可以将其关联如下:

// evaluate the parenthesis ... ($ paperType == 'bond')
$ description = ('Paper:'. 1)? 'Bond': 'Other';
//result
$ description = 'Paper: 1'? 'Bond': 'Other';
2) 现在我们有了三元运算符,我们知道字符串的计算结果为“真”

//php文档 转换为布尔值时,以下值​​被认为是错误的:

。。。 空字符串和字符串“0”

3) 最后

我希望我已经澄清了这个问题。
您好。

是的,它是有效的,我的代码中的运算符优先级问题也是有效的,真丢脸;~)Paper:'首先应用于布尔值($paperType=='bond'),换句话说,代码没有按正确的顺序进行。要解决这个问题,请通过指定括号,基本上就是说,请返回'bond'或'other',然后将其添加到'Paper:'中,而不是尝试将'Paper:'添加为true或false。我现在明白了,当我将“Paper:”连接到布尔值时,结果要么是“Paper:”比较结果为false,要么是“Paper:1”,如果为true,但结果字符串的任何一种计算方式都为true,因此在我的特定情况下,无论发生什么情况,description都将始终设置为“Bond”。非常感谢。谢谢你!是的,这是正确的,这是因为“.”运算符优先于“?:”运算符。
$ description = true? 'Bond': 'Other';
$ description = 'bond';