我有这个:
$color = $status == 1 || $status == 2 ? 'read' : 'unread' || $status == 3 ? 'delete' : 'unread';
然而这是错的。如果$status
不是3 - 它仍会返回'删除'
有什么问题?我应该使用else if
而不是速记吗?
感谢。
答案 0 :(得分:6)
你想要得到什么结果?我假设你想要:
未读
$ color =($ status == 1)? '读': ($ status == 3)? '删除': '未读'
(由于某种原因,没有显示我的换行符)
为了便于阅读,我要使用if/else
或switch
:
switch ($status) {
case 1: $color = 'read'; break;
case 3: $color = 'delete'; break;
default: $color = 'unread';
}
一般来说,除非我获得巨大的改善,否则我不会使用'?:'形式;通常,更具可读性更好。
答案 1 :(得分:3)
1)||并非100%等于OR,例如&&不是100%等于AND
2)使用括号
P.S。:是的,使用“if .. else” - 它会增加代码的可读性。
答案 2 :(得分:1)
我会说不要以速记的方式做到这一点 - 在你忘记你在做什么或者有其他人出现的时候,你会在三天内更容易阅读传记。
答案 3 :(得分:1)
三元运算符具有古怪的约束力。
你可能正在使用地图:
$map = array(0=>"unread", 1=>"unread", 2=>"read", 3=>"delete");
$color = $map[ min(3,$status) ]; // min is actually the max value here
答案 4 :(得分:0)
修正括号谢谢Chvanikoff。
$color = ($status == 1 || $status == 2) ? 'read' : ('unread' || $status == 3 ? 'delete' : '');