คำสั่ง switch นั้นมีลักษณะการทำงานคล้ายกับคำสั่ง if มาก ซึ่งจะถูกใช้ในกรณีที่เมื่อเราต้องการเปรียบเทียบตัวแปร ที่มีค่าต่าง ๆ กัน และทำการประมวลผลคำสั่งแตกต่างกันไปตามค่าของตัวแปร ดังตัวอย่าง
01.
<?php
02.
// ในกรณีที่เราใช้คำสั่ง if เพื่อตรวจสอบเงื่อนไข
03.
if
(
$i
== 0) {
04.
echo
"i equals 0"
;
05.
}
elseif
(
$i
== 1) {
06.
echo
"i equals 1"
;
07.
}
elseif
(
$i
== 2) {
08.
echo
"i equals 2"
;
09.
}
10.
11.
// เราสามารถเปลี่ยนจากคำสั่ง if มาเป็น switch ได้ดังนี้
12.
switch
(
$i
) {
13.
case
0:
14.
echo
"i equals 0"
;
15.
break
;
16.
case
1:
17.
echo
"i equals 1"
;
18.
break
;
19.
case
2:
20.
echo
"i equals 2"
;
21.
break
;
22.
}
23.
?>
ตัวอย่างการใช้คำสั่ง switch เพื่อตรวจสอบเงื่อนไขของตัวแปรชนิด string
01.
<?php
02.
switch
(
$i
) {
03.
case
"apple"
:
04.
echo
"i is apple"
;
05.
break
;
06.
case
"bar"
:
07.
echo
"i is bar"
;
08.
break
;
09.
case
"cake"
:
10.
echo
"i is cake"
;
11.
break
;
12.
}
13.
?>
เมื่อเราได้เห็นตัวอย่างแล้ว เรามาดูความหมายของมันกันดีกว่า ว่าทำไมต้องใช้คำสั่ง break; ทุกเงื่อนไขที่ทำการตรวจสอบ ก็เพราะว่าคำสั่ง switch นั้นมันทำการประมวลผลคำสั่งแบบ line by line (หรือ statement by statement) ในส่วนเริ่มต้นของเงื่อนไขต่าง ๆ ที่กำหนด จะไม่มีคำสั่งที่ต้องประมวลผล เพราะมีเพียงแต่คำสั่ง case ที่ใช้ตรวจสอบเงื่อนไขของตัวแปรเท่านั้น แต่เมื่อโปรแกรมทำการตรวจสอบเงื่อนไขเรียบร้อยแล้ว ก็จะเข้ามาทำงานใน statement ของ case นั้น ๆ ที่ตรงตามเงื่อนไข ซึ่งถ้าเราไม่มีคำสั่ง break; ในแต่ละ case นั้น โปรแกรมก็จะทำการประมวลผลคำสั่งทุกคำสั่งที่อยู่ใต้ case ที่ตรวจสอบเงื่อนไขผ่าน (เป็น true) ดังนั้นเราจึงต้องมีคำสั่ง break; ในแต่ละ case ด้วย เพื่อเป็นตัวบ่งบอกให้โปรแกรมออกจากบล็อก switch ทันทีเมื่อประมวลผลคำสั่งใน case ที่ตรงตามเงื่อนไข
เราลองไปดูตัวอย่าง ในกรณีที่ไม่มีคำสั่ง break กันเลยครับ เพื่อให้เห็นภาพที่ชัดเจนขึ้น
01.
<?php
02.
$i
= 1;
03.
switch
(
$i
) {
04.
case
0:
05.
echo
"$i equals 0\n"
;
06.
case
1:
07.
echo
"i equals 1\n"
;
08.
case
2:
09.
echo
"i equals 2\n"
;
10.
}
11.
12.
/* ผลลัพธ์ที่แสดง
13.
i equals 1
14.
i equals 2
15.
เนื่องจากไม่มีคำสั่ง break เพื่อสั่งให้โปรแกรมหยุดการทำงาน
16.
มันจึงทำการประมวลผลคำสั่งใน case อื่น ๆ ต่อทันที */
17.
?>
ในกรณีที่เราต้องการตรวจสอบค่าหลาย ๆ ค่า ซึ่งในบางค่าที่เราทำการตรวจสอบนั้นจะมี statement (หรือคำสั่ง) ใน case นั้น ๆ เหมือนกัน สามารถทำได้โดย
01.
<?php
02.
switch
(
$i
) {
03.
case
0:
04.
case
1:
05.
case
2:
06.
echo
"i is less than 3 but not negative"
;
07.
break
;
08.
case
3:
09.
echo
"i is 3"
;
10.
}
11.
/* นั่นก็คือถ้า $i = 0, $i = 1, $i =2 ก็จะทำตาม statement เดียวกัน */
12.
?>
เมื่อเรากำหนด case ในการตรวจสอบเงื่อนไขแล้วแต่เราไม่อาจจะกำหนดได้หมดทุก case ดังนั้นใน case อื่น ๆ ที่เราไม่ได้กำหนด เราสามารถกำหนด statement ผ่าน case อื่น ๆ ได้โดยใช้ default ดังตัวอย่าง
01.
<?php
02.
switch
(
$i
) {
03.
case
0:
04.
echo
"i equals 0"
;
05.
break
;
06.
case
1:
07.
echo
"i equals 1"
;
08.
break
;
09.
case
2:
10.
echo
"i equals 2"
;
11.
break
;
12.
default
:
13.
echo
"i is not equal to 0, 1 or 2"
;
14.
}
15.
/* หมายความว่าถ้า $i > 3 หรือ $i < 0 จะทำใน statement ของ default */
16.
?>
เราสามารถใช้คำสั่ง switch ในรูปแบบโครงสร้าง alternative syntax (colon syntax) ก็ได้ ดังตัวอย่าง
01.
<?php
02.
switch
(
$i
) :
03.
case
0:
04.
echo
"i equals 0"
;
05.
break
;
06.
case
1:
07.
echo
"i equals 1"
;
08.
break
;
09.
case
2:
10.
echo
"i equals 2"
;
11.
break
;
12.
default
:
13.
echo
"i is not equal to 0, 1 or 2"
;
14.
endswitch
;
15.
?>