为什么要打印2?
2
echo true ? 1 : true ? 2 : 3;
以我的理解,它应该打印1。
1
为什么它没有按预期工作?
因为您编写的内容与以下内容相同:
echo (true ? 1 : true) ? 2 : 3;
如您所知1被评估为true。
true
您期望的是:
echo (true) ? 1 : (true ? 2 : 3);
因此,请始终使用大括号以避免此类混淆。
正如已经写过的,三元表达式在PHP中是关联的。这意味着首先将执行从 左边开始 的第一个,然后是第二个,依此类推。