php速记问题

php速记问题,php,shorthand,Php,Shorthand,我有这个: $color = $status == 1 || $status == 2 ? 'read' : 'unread' || $status == 3 ? 'delete' : 'unread'; 然而,这是错误的。如果$status不是3,它仍然返回“delete” 怎么了?我是否应该使用else if而不是速记 谢谢。1)| |不是100%等于或像&¬ 100%等于和 2) 使用括号 注意:是的,使用“if..else”-它将提高代码的可读性。1)|不100%等于或不100

我有这个:

$color = $status == 1 || $status == 2 ? 'read' : 'unread' || $status == 3 ? 'delete' : 'unread';
然而,这是错误的。如果
$status
不是3,它仍然返回“delete”

怎么了?我是否应该使用
else if
而不是速记

谢谢。

1)| |不是100%等于或像&¬ 100%等于和
2) 使用括号

注意:是的,使用“if..else”-它将提高代码的可读性。

1)|不100%等于或不100%等于和
2) 使用括号


附言:是的,使用“if..else”-这将提高代码的可读性。

我会说不要这样做,因为速记-速记会更容易阅读,无论是在你忘记正在做什么的三天内,还是当其他人出现时。

我会说不要这样做,因为速记-速记会更容易阅读,三天之内,当你忘记自己在做什么时,或者当其他人出现时,这两种情况都适用于你。

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

  • 阅读
  • 未读
  • 删除
  • 未读

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

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

    然而,为了可读性,我会使用
    if/else
    开关

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

    一般来说,我不使用“?:”形式,除非我能获得巨大的进步;通常,可读性越强越好。

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

  • 阅读
  • 未读
  • 删除
  • 未读

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

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

    然而,为了可读性,我会使用
    if/else
    开关

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

    一般来说,我不使用“?:”形式,除非我能获得巨大的进步;通常情况下,可读性更好。

    用括号固定,谢谢Chvanikoff

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

    修正了括号,谢谢Chvanikoff

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

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

    你可以用地图来代替:

    $map = array(0=>"unread", 1=>"unread", 2=>"read", 3=>"delete");
    
    $color = $map[ min(3,$status) ];   // min is actually the max value here
    

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

    你可以用地图来代替:

    $map = array(0=>"unread", 1=>"unread", 2=>"read", 3=>"delete");
    
    $color = $map[ min(3,$status) ];   // min is actually the max value here
    

    实际上,我还从未在PHP中使用过开关。我将收回我对我的答案所说的话
    $color=$status==1 | |$status==2?“读取“:(“未读”|“$status==3?”删除“:“未读”)并移动到一个开关中,因为您是对的。实际上我还从未在PHP中使用过开关。我将收回我对我的答案所说的话
    $color=$status==1 | |$status==2?“读取“:(“未读”|“$status==3?”删除“:“未读”)
    并移动到交换机中,因为您的右侧。确定:&&and | |的优先级高于and和OR。当然:&&and | |的优先级高于and和OR。你的数组$map:如果“未读”只是单独存在,这意味着什么?@Kyle:啊,对不起。第一个条目占用
    [0]
    索引。这是另一个退路。如果您确定$status不能为零,则可以将其忽略。在其他情况下,最好记下所有潜在值。我会省去所有的
    123=>
    说明符,让它成为一个列表。哦,准确地列出它们更具可读性如果$status肯定介于0和3之间,那么您也可以省去
    min()
    hack,使其比switch语句更简洁。您的数组$map:如果“未读”只是单独存在,这意味着什么?@Kyle:啊,对不起。第一个条目占用
    [0]
    索引。这是另一个退路。如果您确定$status不能为零,则可以将其忽略。在其他情况下,最好记下所有潜在值。我会省去所有的
    123=>
    说明符,让它成为一个列表。哦,准确地列出它们更具可读性如果$status肯定介于0和3之间,那么您还可以省略
    min()
    hack,使其比switch语句更简洁。