简明条件“?”

时间:2014-02-20 21:33:09

标签: php conditional

下面的第一个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";
?>

3 个答案:

答案 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).