PHP'de break'in İsteğe Bağlı Olması

break komutu isteğe bağlıdır. Ancak, onsuz case bloklarının davranışı beklenmedik olacaktır. Bir örnekle inceleyelim. Şu şekilde bir kodumuz olduğunu varsayalım:

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

İçindeki tüm break ifadelerini kaldıralım, ve $num değişkenine başlangıç olarak 3 sayısını atayalım.

Başlangıçta her şey eskisi gibi çalışacaktır:

php<?php
  $num = 3; // buraya 3 sayısını yazalım
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // Çalıştırdıktan sonra kod 3 yazdıracak - her şey yolunda
?>

Şimdi $num değişkenine 2 sayısını atayalım. Bu durumda, beklenildiği gibi case 2 çalışacak, ardından beklenmedik bir şekilde case 3 de çalışacaktır:

php<?php
  $num = 2;
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // Çalıştırdıktan sonra kod önce 2, sonra 3 yazdıracak
?>

Eğer $num değişkenine 1 sayısı atanırsa, tüm case yapıları çalışacaktır:

php<?php
  $num = 1;
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // Çalıştırdıktan sonra kod önce 1, sonra 2, ardından 3 yazdıracak
?>

Yani, break olmadığında, planlanan case çalıştıktan sonra, onun altındaki tüm case ifadeleri de çalışır. Bazen bu özellik problem çözmede kullanılır.

Aşağıdaki örnekte, eğer $num değişkeninin değeri 1 veya 2 ise, $res değişkenine 'a' yazılır. Eğer $num değişkeninin değeri 3 ise, $res değişkenine 'b' yazılır:

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

Yukarıda, bazen bu özelliğin kullanıldığını yazdım, ancak genel olarak, kodu çok açık olmadığı için kullanılmasını tavsiye etmiyorum.

Böyle bir problemi if yapıları ile çözmek daha anlaşılırdır:

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