PHP-те break міндетті емес

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