Tính tùy chọn của break trong PHP
Lệnh break là tùy chọn.
Tuy nhiên, nếu không có nó, hành vi của các khối case
sẽ rất bất ngờ. Hãy xem ví dụ sau.
Giả sử chúng ta có đoạn mã như thế này:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
break;
case 2:
echo 2;
break;
case 3:
echo 3;
break;
}
?>
Hãy bỏ tất cả các lệnh break trong đó, và trong biến
$num, trước tiên hãy ghi số 3.
Lúc này mọi thứ vẫn sẽ hoạt động như trước đây:
<?php
$num = 3; // giả sử ở đây là số 3
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Sau khi chạy, mã sẽ in ra 3 - mọi thứ đều ổn
?>
Bây giờ hãy ghi số 2 vào biến $num. Trong trường hợp này, case 2 sẽ được thực thi như dự kiến,
nhưng sau đó bất ngờ là case 3 cũng được thực thi:
<?php
$num = 2;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Sau khi chạy, mã sẽ in ra 2, và sau đó là 3
?>
Nếu chúng ta ghi số 1 vào biến $num,
thì tất cả các cấu trúc case sẽ được thực thi:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Sau khi chạy, mã sẽ in ra 1, sau đó là 2, và sau đó là 3
?>
Vậy là, khi không có break,
sau khi thực thi case dự định,
tất cả các case bên dưới nó cũng sẽ được thực thi. Đôi khi
đặc điểm này được sử dụng khi giải quyết các bài toán.
Trong ví dụ tiếp theo, nếu biến $num
có giá trị 1 hoặc 2, thì
giá trị 'a' sẽ được ghi vào biến $res.
Nếu biến $num có giá trị
3, thì giá trị 'b'
sẽ được ghi vào biến $res:
<?php
$num = 1;
switch ($num) {
case 1:
case 2:
$res = 'a';
break;
case 3:
$res = 'b';
break;
}
echo $res;
?>
Ở trên tôi đã viết rằng đôi khi đặc điểm này được sử dụng, nhưng nói chung, tôi không khuyến nghị sử dụng nó, vì mã sẽ trở nên không thực sự rõ ràng.
Giải quyết bài toán như vậy bằng lệnh if sẽ rõ ràng hơn:
<?php
$num = 1;
if ($num == 1 or $num == 2) {
$res = 'a';
}
if ($num == 3) {
$res = 'b';
}
echo $res;
?>