corresponding nested ternary operator in php?和In which order are nested short hand assignments evaluated?解释了PHP中的三元运算符无法按预期进行评估。
见这个例子:
echo 0 ?: 1 ?: 2 ?: 3; //1
echo 0 ? 0 : 1 ? 1 : 2 ? 2 : 3; //2
即使阅读文档,我仍然无法理解为什么短期和长期形式的评估方式不同?
答案 0 :(得分:3)
你已经从一个错误的假设开始,这两个代码行是相同的,因为它们不是。三元(expression ? IF TRUE : IF FALSE
)运算符是左关联的。
因此,如果您逐步完成,您可能会更好地看到它:
第一个三元线:
echo 0 ?: 1 ?: 2 ?: 3; //1
括号:
echo ((0 ?: 1) ?: 2) ?: 3; //1 └──────┘ //0 → FALSE ↓ //Second expression: 1 echo ((1) ?: 2) ?: 3; //1 └────────┘ //1 → TRUE ↓ //First expression: 1 echo (1) ?: 3; //1 └──────┘ //1 → TRUE ↓ //First expression: 1 echo 1; //1
第二个三元线:
echo 0 ? 0 : 1 ? 1 : 2 ? 2 : 3; //2
括号:
echo ((0 ? 0 : 1) ? 1 : 2) ? 2 : 3; //2 └─────────┘ //0 → FALSE ↓ //Second expression: 1 echo ((1) ? 1 : 2) ? 2 : 3; //2 └───────────┘ //1 → TRUE ↓ //First expression: 1 echo (1) ? 2 : 3; //2 └─────────┘ //1 → TRUE ↓ //First expression: 2 echo 2; //2