калі скарочаная РНР, калі ёсць некалькі elseifs

Як я магу выкарыстоўваць скарочаны запіс для РНР, калі пры наяўнасці некалькіх elseifs?

Я ведаю, як зрабіць гэта з адной умовай, але тое, што, калі ёсць некалькі?

Вось як гэта:

if($a == 00){ 
 echo 'Clear';
}elseif ($a == 01) {
 echo 'Processing';
} elseif ($a == 10) {
 echo 'Marked for delete';
}
0
Гэта працуе. Я спрабую выкарыстоўваць, калі гэта скарочаная Напрыклад: ($ ўзрост> 10 ($ адзнака <80 'за' :? 'Вышэй сярэдняга'): ($ адзнака <50 'за' ?: 'Вышэй сярэдняга') )
дададзена аўтар Norman, крыніца
Калі вы зробіце гэта, вы будзеце шкадаваць пра гэта - гнездавыя трыяд ар ня інтуітыўна, і можа прывесці да цяжкіх праблемах адладкі, а таксама той факт, што вы будзеце марнаваць дні, спрабуючы зразумець усе з яго зноў, калі вы калі-небудзь спатрэбіцца, каб змяніць яго
дададзена аўтар Mark Baker, крыніца
Хіба гэта не працуе?
дададзена аўтар JJJ, крыніца

7 адказы

Вы можаце, вядома, «ланцужок» трайнога аператар, але гэта прыводзіць на жахлівае коду. <�Моцны> Не рабіце гэтага .

Выкарыстоўвайце , калі / яшчэ , а перамыкач або, магчыма, асацыятыўны масіў, у залежнасці ад абставін. Напрыклад, вы маглі б зрабіць гэта:

$messages = array(
    00 => 'Clear',
    01 => 'Processing',
    10 => 'Marked for delete',
);

echo isset($messages[$a]) ? $messages[$a] : null;

У дадзеным выпадку гэта не будзе наогул лепш, чым , калі або перамыкач заявы, але гэта карысны інструмент, каб мець на ўвазе.

5
дададзена

перамыкач заяву?

switch ($a) {
  case 0:
    echo "Clear";
    break;
  case 1:
    echo "Processing";
    break;
  case 2:
    echo "Marked for delete";
    break;
}

у якасці альтэрнатывы вы можаце выкарыстоўваць патройны аператар:

echo ($a == 0 ? "Clear" :
     ($a == 1 ? "Processing" :
     ($a == 2 ? "Marked for delete" : "")));
4
дададзена
+1 За чытаны патройны аператар :)
дададзена аўтар Vlad Preda, крыніца
+1, тое ж самае на readablity.
дададзена аўтар Orangepill, крыніца
пагадзіліся, што больш зручным для чытання, чым большасць людзей пісаць, але калі ў вас ёсць шмат варыянтаў, вы будзеце ў канчатковым выніку з чарады блізкіх дужак ў канцы, які не з'яўляецца вялікім. Я па-ранейшаму аддаю перавагу выкарыстоўваць іншы сінтаксіс для ўкладзеных трыяд.
дададзена аўтар Spudley, крыніца

use switch

switch ($a) {
    case 1:
        echo "clear";
        break;
    case 10:
        echo "marked default";
        break;
    default:
        echo "not tracked case";
        break;
}
2
дададзена

Вы павінны <�моцны> НІКОЛІ гэта зрабіць, гэта цалкам нечытэльным, але ...

echo ($a==00?"Clear":($a== 01?"Processing":($a == 10?"Marked For Delete":"")));
2
дададзена
Па-мойму, гэта свайго роду рэчы робіць PHP толькі для запісу мовы
дададзена аўтар Orangepill, крыніца
@slebetman На самай справе, гледзячы на ​​сваю пасаду ён працуе ... ніколі не бачыў laided, што шлях .... Мне падабаецца
дададзена аўтар Orangepill, крыніца
@slebetman, але ваша форма я магу глядзець і я ведаю, што адбываецца. асабіста я б яшчэ пайсці з выключальнікам, але калі адзін з маіх калегаў напісаў трехкомпонентной як я не адчуваў бы сябе вымушаным клуб ім над галавой
дададзена аўтар Orangepill, крыніца
Гэта вельмі чытаны з правам фарматавання.
дададзена аўтар slebetman, крыніца
Фарматаванне трохі парушаны з-за настойлівасць РНР выкарыстання ((())). Ён выглядае нашмат лепш у C ці JavaScript.
дададзена аўтар slebetman, крыніца
Тое, што я меў на ўвазе тую ж форму і працаваць у C і JavaScript - але яны выглядаюць значна лепш, чым у PHP, так як C і Javascript не прымусіць вас выкарыстоўваць фігурныя дужкі() вакол вашых трехкомпонентной аператараў.
дададзена аўтар slebetman, крыніца

Вы можаце зрабіць гэта так:

<�Код> рэха ($ а == 0 'ясна': ($ а == 01 'Апрацоўка': ($ а == 10 'Пазначана для выдалення' :? ')));

Але Джон правоў, не рабіце гэтага - як вы можаце бачыць, код непрыгожа.

1
дададзена

Вось прыклад трынітарнага аператара (скарочаная з калі/іншае)

$days = ($month == 2 ? ($year % 4 ? 28 : ($year % 100 ? 29 
: ($year %400 ? 28 : 29)))
 : (($month - 1) % 7 % 2 ? 30 : 31)); 
//returns days in the given month

Але гэта будзе збіваць з панталыку працаваць!

Таму я аддаю перавагу працаваць з перамыкачом разе!

switch ($type) {
  case 'a':
    $type = 'Type A';
    break;

  case 'b':
    $type = 'Type B';
    break;

  case 'c':
    $type = 'Type C';
    break;

  default:
    break;
}
0
дададзена

Я думаю, што заява перамыкач можа быць лепш падыходзіць для некалькіх ELSEIF х

switch ($a) {
    case "00":
        break;
    case "Clear":
        break;
    default:
        break;
}
0
дададзена