PHP中的三元运算符

4
$chow = 3;
echo ($chow == 1) ? "one" : ($chow == 2) ? "two" : "three";

输出:三

$chow = 1;
echo ($chow == 1) ? "one" : ($chow == 2) ? "two" : "three";

输出结果:two

有人能解释一下为什么当$chow = 1时,输出结果是"two"而不是"one"吗?


你的问题只涉及第二个代码块吗?如果是,那第一个代码块是用来做什么的? - Rizier123
3
请阅读相关文档。 - sectus
永远不要嵌套三元运算符——这会导致混乱和杂乱的代码,而且常常会出现逻辑错误,正如你所见。 - Dan Smith
http://php.net/manual/en/language.operators.comparison.php#example-138 - billyonecan
3个回答

12

这是因为三目运算符(?:)是从左到右结合的,所以它是这样被评估的:

((1 == 1) ? "one" : (1 == 2)) ? "two" : "three"
所以1 == 1 -> TRUE的意思是:
"one" ? "two" : "three"

而且"one" -> TRUE,因此输出结果将为:

two

6
$chow = 1;
echo ($chow == 1) ? "one" : (($chow == 2) ? "two" : "three");

当操作结果不明确时,请记得使用括号。

现在的输出结果为1。


1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Rizier123
很明显,三元运算符将从右到左进行评估。 - Kamil Karkus
1
如此显然,以至于你甚至错了!它是从左到右的!左结合意味着从左到右! - Rizier123

0
运算符有些混淆,你需要在第二个条件周围加上括号。使用下面的代码:
$chow = 1;
echo ($chow == 1) ? "one" : (($chow == 2) ? "two" : "three"); //returns 1

希望这能对你有所帮助。

操作员感到困惑。不!这里正在发生的事情非常明确! - Rizier123
@Rizier123 实际上,如果操作符获取值 2,则会将“one”视为该值,因此加上引号会使它更简单。 - Utkarsh Dixit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接