下面的第一个php脚本确实显示了“确切的七个”,但另一个没有显示。知道为什么吗?
-这个作品
<?
$num = 7;
echo ($num == 7) ? "exactly seven" : "not seven";
?>--这个不是
<?
$num = 7;
echo ($num == 7) ? "exactly seven" : ($num > 7) ? "more than seven" : "less than seven";
?>发布于 2014-02-20 21:36:17
这就是操作符的优先级。添加一些括号,以确保事情按正确的顺序发生。
$num = 7;
echo ($num == 7) ? "exactly seven" : (($num > 7) ? "more than seven" : "less than seven");发布于 2014-02-20 21:38:17
表达式第一部分的结果是($num == 7) ? "exactly seven" : ($num > 7)作为另一部分的输入。
因此,表达式可以读取为echo "exactly seven" ? "more than seven" : "less than seven";。
由于"exactly seven"的计算结果为布尔值true,因此回显的值是“大于7”。
发布于 2014-02-20 21:52:27
正如人们所说,它在运算符的优先位置。代码行的行为
echo ($num == 7) ? "exactly seven" : ($num > 7) ? "more than seven" : "less than seven";叫做Non-obvious ternary behavior。计算是从左到右的,所以
1. echo (expr1) ? (expr2) : (expr3) ? (expr4) : (expr5)
2. evaluates the first ternary operator `?` to
echo (expr2) ? (expr4) : (expr5)
//because expr1 was TRUE ($num == 7)
3. and since the expr2 is "exactly seven" it finally evaluates to
echo (expr4). https://stackoverflow.com/questions/21920071
复制相似问题