我有这个:
$color = $status == 1 || $status == 2 ? 'read' : 'unread' || $status == 3 ? 'delete' : 'unread';
然而这是错误的。如果$status
不是 3 - 它仍然返回“删除”
怎么了?我应该else if
为此使用 a 而不是简写吗?
谢谢。
你想为你的结果得到什么?我假设你想要:
未读
$color = ($status == 1) ? '读' : ($status == 3) ? “删除”:“未读”
(也就是说,由于某种原因,没有显示我的换行符)
但是,为了可读性,我会使用if/else
or switch
:
switch ($status) {
case 1: $color = 'read'; break;
case 3: $color = 'delete'; break;
default: $color = 'unread';
}
一般来说,除非我能获得巨大的进步,否则我不会使用 '?:' 形式;通常,可读性更好。
1) || 不是 100% 等于 OR 例如 && 不是 100% 等于 AND
2) 使用括号
PS:是的,使用“if .. else”——它会增加代码的可读性。
我会说不要将其用作速记 - 速记会更容易阅读,无论是在三天内你忘记自己在做什么,还是当其他人出现时。
三元运算符有一个古怪的绑定。
您可以改用地图:
$map = array(0=>"unread", 1=>"unread", 2=>"read", 3=>"delete");
$color = $map[ min(3,$status) ]; // min is actually the max value here
用括号固定感谢 Chvanikoff。
$color = ($status == 1 || $status == 2) ? 'read' : ('unread' || $status == 3 ? 'delete' : '');