嗨,我只是想知道为什么这段代码会产生(至少对我而言)不正确的结果。
好吧,可能我在这里有错误
$description = 'Paper: ' . ($paperType == 'bond') ? 'Bond' : 'Other';
我猜测如果paperType等于'Bond',那么描述是'Paper:Bond',如果paperType不等于'Bond'那么描述就是'Paper:Other'。
但是,当我运行此代码时,结果描述是“邦德”或“其他”并离开了我 想知道字符串'Paper:'去了哪里???
答案 0 :(得分:91)
$description = 'Paper: ' . ($paperType == 'bond' ? 'Bond' : 'Other');
尝试添加括号,以便字符串以正确的顺序连接到字符串。
答案 1 :(得分:11)
与运营商优先级有关。您必须执行以下操作:
$description = 'Paper: ' . (($paperType == 'bond') ? 'Bond' : 'Other');
答案 2 :(得分:2)
我认为每个人都给出了解决方案,我想提供意外结果的原因。
首先,您可以检查原点,以及如何评估运算符(左,右,关联等)。
http://php.net/manual/fa/language.operators.precedence.php
现在,如果我们分析你的句子。
$ 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)我们现在有三元运算符,我们知道字符串被评估为“true”
// php文档 转换为布尔值时,以下值被视为FALSE:
... 空字符串,字符串“0”
$ description = true? 'Bond': 'Other';
3)最后
$ description = 'bond';
我希望我澄清了这个问题。 问候。