php简写问题

时间:2011-04-02 21:54:43

标签: php shorthand

我有这个:

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

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

有什么问题?我应该使用else if而不是速记吗?

感谢。

5 个答案:

答案 0 :(得分:6)

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

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

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

  4. (由于某种原因,没有显示我的换行符)

    为了便于阅读,我要使用if/elseswitch

    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' : '');