1

我有这个:

$color = $status == 1 || $status == 2 ? 'read' : 'unread' || $status == 3 ? 'delete' : 'unread';

然而这是错误的。如果$status不是 3 - 它仍然返回“删除”

怎么了?我应该else if为此使用 a 而不是简写吗?

谢谢。

4

5 回答 5

6

你想为你的结果得到什么?我假设你想要:

  1. 未读
  2. 删除
  3. 未读

    $color = ($status == 1) ? '读' : ($status == 3) ? “删除”:“未读”

(也就是说,由于某种原因,没有显示我的换行符)

但是,为了可读性,我会使用if/elseor switch

switch ($status) {
    case 1: $color = 'read'; break;
    case 3: $color = 'delete'; break;
    default: $color = 'unread';
}

一般来说,除非我能获得巨大的进步,否则我不会使用 '?:' 形式;通常,可读性更好。

于 2011-04-02T22:01:29.663 回答
3

1) || 不是 100% 等于 OR 例如 && 不是 100% 等于 AND
2) 使用括号

PS:是的,使用“if .. else”——它会增加代码的可读性。

于 2011-04-02T21:56:13.200 回答
1

我会说不要将其用作速记 - 速记会更容易阅读,无论是在三天内你忘记自己在做什么,还是当其他人出现时。

于 2011-04-02T22:01:01.370 回答
1

三元运算符有一个古怪的绑定。

您可以改用地图:

$map = array(0=>"unread", 1=>"unread", 2=>"read", 3=>"delete");

$color = $map[ min(3,$status) ];   // min is actually the max value here
于 2011-04-02T22:04:43.447 回答
0

用括号固定感谢 Chvanikoff。

$color = ($status == 1 || $status == 2) ? 'read' : ('unread' || $status == 3 ? 'delete' : '');
于 2011-04-02T22:01:42.893 回答