首页  >  文章  >  后端开发  >  为什么三元运算符和字符串连接会产生不需要的结果?

为什么三元运算符和字符串连接会产生不需要的结果?

Patricia Arquette
Patricia Arquette原创
2024-10-24 05:12:01924浏览

Why Do Ternary Operator and String Concatenation Produce Unwanted Results?

三元运算符和字符串连接行为

在编程中,三元运算符 (?) 提供了一种简洁的方法来评估条件和赋值。但是,与字符串连接相关的某些细微差别可能会导致意外行为。

考虑以下代码片段:

<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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn