三元运算符和字符串连接怪癖?
-
19-09-2019 - |
题
您好我只是想知道为什么这个代码收益率(至少我)不正确的结果。
好了,可能我在这里有毛病
$description = 'Paper: ' . ($paperType == 'bond') ? 'Bond' : 'Other';
我猜测,如果paperType等于“债券”,那么描述为“纸:债券”,如果paperType不等于“债券”,则描述为“纸:其它”。
但是,当运行此代码的结果是描述可以是“债券”或“其他”,只剩下我 想知道字符串“论文:”去???
解决方案
$description = 'Paper: ' . ($paperType == 'bond' ? 'Bond' : 'Other');
尝试因此字符串被级联以正确的顺序的字符串添加括号。
其他提示
它与操作者有关的优先级。你必须做到以下几点:
$description = 'Paper: ' . (($paperType == 'bond') ? 'Bond' : 'Other');
我想每个人给了解决方案,我想贡献了意想不到的结果的原因。
首先在这里你可以检查原点,运营商如何评估(左,右,联想等)。
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)我们现在有三元运算符,我们知道,一个字符串被评为“真正的”
// PHP文档 当转换为布尔型,下面的值被认为是FALSE:
... 空字符串,字符串“0”
$ description = true? 'Bond': 'Other';
3)最后
$ description = 'bond';
希望已澄清的问题。 问候。
不隶属于 StackOverflow