PHP中if条件下3个变量的顺序比较给出了错误的输出


Sequential comparison of 3 variable in if condition giving wrong output in PHP

我只是对三个变量value

的顺序值比较感到好奇
$a=5; $b=6;  $c=7;

我有以上3个变量,但在不同的场景下测试如下

echo ($c > ($b > $a)) ? "true" : "false";  // output: false;
echo (($c > $b) > $a) ? "true" : "false";  // output: false;
echo intval($b > $a); // output: 1
echo intval($c > $b); // output: 1

在上述情况下,$ a,$b和$c包含正数值,如果我们将true与$a$c与true进行大/小号比较,则总是返回false

echo ($c > true) ? "true": "false"; // output: false
echo (true  > $c) ? "true": "false"; // output: false
echo ($a > true) ? "true": "false"; // output: false
echo (true  > $a ) ? "true": "false"; // output: false

为什么比较给出错误的输出与左和右精度 ?对于以下条件

echo ($c > ($b > $a)) ? "true" : "false";  // output: false;
echo (($c > $b) > $a) ? "true" : "false";  // output: false;

如果压缩正数和布尔值返回false,那么为什么下面的比较返回false?

echo ($c > true) ? "true": "false"; // output: false
echo (true  > $c) ? "true": "false"; // output: false

如果比较中涉及布尔值,则两个操作数都转换为布尔值。在您的情况下,这意味着您总是比较true > true,这显然是false

所有的数值比较都是true,例如:

$c > ($b > $a)

:

→ 7 > (6 > 5)
→ 7 > true
→ true > true
→ false

实际会导致true的情况是:

true > (5 > 6)
→ true > false
→ true