嵌套三元运算符执行异常求助:预期返回5实际得到50
解决PHP嵌套三元运算符返回异常的问题
你踩了PHP三元运算符优先级的坑啦!咱们来拆解一下你的代码问题:
问题根源
你的代码:
$acc = "free"; echo $limit = $acc == "free" ? 5 : $acc == "muyip" ? 50 : 1000;
在PHP中,三元运算符?:是左结合的,也就是说这段代码会被PHP解析成:
$limit = ($acc == "free" ? 5 : $acc == "muyip") ? 50 : 1000;
当$acc是"free"时,第一个三元表达式会返回5,而5在布尔判断中是true,所以会执行后面的?50,最终得到50,这就是为什么实际输出和预期不符。
修复方案
给内层的三元运算符加上括号,明确执行顺序:
$acc = "free"; echo $limit = $acc == "free" ? 5 : ($acc == "muyip" ? 50 : 1000);
这样PHP会先判断外层的条件,当$acc == "free"为true时,直接返回5,完全符合你的预期。
额外建议
如果逻辑更复杂,其实用if-else结构可读性会更高,避免优先级带来的隐藏问题:
$acc = "free"; if ($acc == "free") { $limit = 5; } elseif ($acc == "muyip") { $limit = 50; } else { $limit = 1000; } echo $limit;
内容的提问来源于stack exchange,提问作者Yecebain Kitbeja
相关产品推荐
相关产品推荐

