下面的第一个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";
?>
答案 0 :(得分:11)
它被称为运营商的优先级。添加一些括号以确保以正确的顺序发生事情,例如
$num = 7;
echo ($num == 7) ? "exactly seven" : (($num > 7) ? "more than seven" : "less than seven");
答案 1 :(得分:4)
表达式第一部分的结果($num == 7) ? "exactly seven" : ($num > 7)
用作另一部分的输入。
因此表达式可以读作echo "exactly seven" ? "more than seven" : "less than seven";
。
由于"exactly seven"
的计算结果为布尔值,因此回显的值为“大于7”。
答案 2 :(得分:0)
正如人们所说,它是运营商的优先权。您的代码行的行为
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).