Opsionalitas break dalam PHP

Perintah break adalah opsional. Tanpanya, bagaimanapun, perilaku blok case akan tidak terduga. Mari kita lihat contohnya. Misalkan kita memiliki kode seperti ini:

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

Mari kita hapus semua break di dalamnya, dan dalam variabel $num untuk awal kita tulis angka 3.

Untuk sini semuanya akan bekerja seperti biasa:

php<?php
  $num = 3; // misalkan di sini angka 3
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // Setelah dijalankan kode akan menampilkan 3 - semuanya baik
?>

Sekarang mari kita tulis angka 2 ke dalam variabel $num. Dalam kasus ini, yang diharapkan case 2 akan dieksekusi, dan kemudian secara tidak terduga case 3 juga akan dieksekusi:

php<?php
  $num = 2;
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // Setelah dijalankan kode akan menampilkan 2, lalu 3
?>

Jika kita menulis angka 1 ke dalam variabel $num, maka semua konstruksi case akan dieksekusi:

php<?php
  $num = 1;
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // Setelah dijalankan kode akan menampilkan 1, lalu 2, dan kemudian 3
?>

Artinya, ketika tidak ada break, setelah case yang dimaksud dieksekusi, semua case di bawahnya juga akan dieksekusi. Terkadang fitur seperti ini digunakan dalam menyelesaikan masalah.

Dalam contoh berikut, jika variabel $num memiliki nilai 1 atau 2, maka nilai 'a' akan ditulis ke dalam variabel $res. Namun, jika variabel $num memiliki nilai 3, maka nilai 'b' akan ditulis ke dalam variabel $res:

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

Di atas saya menulis bahwa terkadang fitur seperti ini digunakan, tetapi saya, secara umum, tidak merekomendasikan menggunakannya, karena kode menjadi tidak sangat jelas.

Lebih jelas menyelesaikan masalah seperti ini dengan if:

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