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;
?>