在编程中,三元运算符 (?) 提供了一种简洁的方法来评估条件和赋值。但是,与字符串连接相关的某些细微差别可能会导致意外行为。
考虑以下代码片段:
<code class="php">$description = 'Paper: ' . ($paperType == 'bond') ? 'Bond' : 'Other';</code>
此处的目标是根据 的值分配不同的描述$paperType.如果 $paperType 等于“bond”,则 $description 应为“Paper:Bond”。否则,应该是“Paper: Other”。
但是,实际结果与预期不同。它不附加“Paper:”前缀,而是仅返回“Bond”或“Other”。
要理解为什么会发生这种情况,让我们分解代码:
<code class="php">($paperType == 'bond') ? 'Bond' : 'Other'</code>
这个表达式评估条件 $paperType == 'bond'。如果为 true,则返回“Bond”。如果为 false,则返回 'Other'。
在原始代码中,此表达式直接连接到字符串 'Paper: '。
<code class="php">'Paper: ' . (condition ? 'Bond' : 'Other')</code>
出现此问题的原因是字符串 'Paper : ' 连接到三元表达式的结果,而不是条件本身。因此,如果 $paperType 等于 'bond',结果是 'Bond',它与一个空字符串(由于尾随冒号)连接,产生 'Bond'。
为了实现预期的行为,字符串连接应括在括号中:
<code class="php">$description = 'Paper: ' . (($paperType == 'bond') ? 'Bond' : 'Other');</code>
这可确保字符串 'Paper: ' 连接到计算的三元表达式,从而产生正确的值: 'Paper: Bond' 如果 $paperType 为 '否则为“债券”和“纸张:其他”。
以上是为什么三元运算符和字符串连接会产生不需要的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!