首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >嵌套的ternery运算符输出wierd结果

嵌套的ternery运算符输出wierd结果
EN

Stack Overflow用户
提问于 2012-11-03 00:47:53
回答 5查看 99关注 0票数 1

这将输出'Option 1‘。我不知道它出了什么问题。

代码语言:javascript
运行
复制
$result = (0 == 0) ? 'Option 0' : (1==2) ? 'Option 1' : 'Option 2';

谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-11-03 01:05:46

您在这里遇到了和的问题。在您放置括号的地方,您的理解不足变得明显。让我们回顾一下:

代码语言:javascript
运行
复制
$result = (0 == 0) ? 'Option 0' : (1 == 2) ? 'Option 1' : 'Option 2';
          ^      ^                ^     ^

我并不是说这很容易,但是正如这段代码已经显示的那样,您在这里放置了多余的圆括号。它们是不需要的,这通常是自己的代码不确定的标志。正确的变体应该是:

代码语言:javascript
运行
复制
$result = 0 == 0 ? 'Option 0' : 1 == 2 ? 'Option 1' : 'Option 2';

现在,这已经表明您不确定将括号放在哪里。了解了这一点,也包含了你问题的解决方案。将你的弱点转化为优势,只需先做第一次检查,然后再做第二次检查--但这一次要实际使用括号:

代码语言:javascript
运行
复制
$result = 0 == 0 ? 'Option 0' : (1 == 2 ? 'Option 1' : 'Option 2');
                                ^                                ^

这将为您提供预期的结果,即括号控制优先级。

提示:您可以通过在编写以下语句时使用缩进来使更明显:

代码语言:javascript
运行
复制
$result = 
    0 == 0 ? 'Option 0' 
           : (1 == 2 ? 'Option 1' 
                     : 'Option 2')
;

(或类似的)只是为了让它在第一眼看起来更易读。正如它所显示的,这是一个复杂的决定。与复杂的事情一样,为它们编写代码时出现错误的情况也更多。这很正常。通过使用缩进来保持代码的可读性会有所帮助。另一种方法是降低复杂性。

代码语言:javascript
运行
复制
$decide  = 2:
$results = array(
    0 => 'Option 0', 
    1 => 'Option 1',
);
$result  = isset($results[$decide]) ? $results[$decide] : 'Default Option';

这里只需要一个决定,所以它就不那么复杂了。如果您有三种以上的可能性,则此示例更有意义,但即使对于三种可能性,这也可能是一种改进,因为在前面很明显存在默认情况。

票数 3
EN

Stack Overflow用户

发布于 2012-11-03 00:49:11

尝试添加第二组分组括号:

代码语言:javascript
运行
复制
$result = (0 == 0) ? 'Option 0' : ((1==2) ? 'Option 1' : 'Option 2');

干杯

票数 1
EN

Stack Overflow用户

发布于 2012-11-03 00:49:21

您必须将第二个路径用引号括起来:

代码语言:javascript
运行
复制
  $result = (0 == 0)?'Option 0':((1==2)?'Option 1':'Option 2');

顺便说一句:由于这种意外的行为,不推荐使用嵌套/堆叠三元。请参阅php文档http://php.net/manual/en/language.operators.comparison.php

注意:建议您避免“堆叠”三元表达式。在一条语句中使用多个三元运算符时,PHP的行为并不明显:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13199637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档