คำสั่ง 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.?>