Break-ի ոչ պարտադիր լինելը PHP-ում

break հրամանը պարտադիր չէ։ Առանց դրա, սակայն, case բլոկների վարքագիծը կլինի անսպասելի։ Եկեք նայենք օրինակով։ Ենթադրենք ունենք այսպիսի կոդ։

php<?php
  $num = 1;
  
  switch ($num) {
    case 1:
      echo 1;
    break;
    case 2:
      echo 2;
    break;
    case 3:
      echo 3;
    break;
  }
?>

Հանենք դրանից բոլոր break-երը, իսկ փոփոխականում $num սկզբից գրենք 3 թիվը։

Մինչև հիմա ամեն ինչ կաշխատի այնպես, ինչպես և աշխատում էր։

php<?php
  $num = 3; // ենթադրենք այստեղ 3 թիվն է
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // Գործարկումից հետո կոդը կարտածի 3 - ամեն ինչ լավ է
?>

Եկեք այժմ $num փոփոխականում գրենք 2 թիվը։ Այս դեպքում մեզ մոտ սպասված կերպով կկատարվի case 2, ապա անսպասելի կերպով նաև case 3։

php<?php
  $num = 2;
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // Գործարկումից հետո կոդը կարտածի 2, ապա 3
?>

Եթե $num փոփոխականում գրենք 1 թիվը, ապա ընդհանրապես կկատարվեն բոլոր case կառուցվածքները։

php<?php
  $num = 1;
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // Գործարկումից հետո կոդը կարտածի 1, ապա 2, ապա 3
?>

Այսինքն ստացվում է, որ break-ի բացակայության դեպքում նախատեսված case-ի կատարումից հետո, կկատարվեն նաև դրանից ներքև գտնվող բոլոր case-երը։ Երբեմն այսպիսի առանձնահատկություն օգտագործում են, խնդիրներ լուծելիս։

Հաջորդ օրինակում, եթե $num փոփոխականը ունի 1 կամ 2 արժեք, ապա $res փոփոխականում կգրվի 'a'։ Իսկ եթե $num փոփոխականը ունի 3 արժեք, ապա $res փոփոխականում կգրվի 'b'։

php<?php
  $num = 1;
  
  switch ($num) {
    case 1:
    case 2:
      $res = 'a';
    break;
    case 3:
      $res = 'b';
    break;
  }
  
  echo $res;
?>

Վերևում գրեցի, որ երբեմն օգտագործում են նման առանձնահատկություն, բայց ես, ընդհանուր առմամբ, խորհուրդ չեմ տալիս դրան օգտագործել, քանի որ կոդը դառնում է ոչ շատ ակնհայտ։

Ավելի ակնհայտ է լուծել նման խնդիր if-երով։

php<?php
  $num = 1;
  
  if ($num == 1 or $num == 2) {
    $res = 'a';
  }
  
  if ($num == 3) {
    $res = 'b';
  }
  
  echo $res;
?>