ถ้าคุณเป็นนักพัฒนา PHP ที่คุ้นเคยกับ switch-case มานาน วันนี้เรามีเครื่องมือที่ดีกว่า สั้นกว่า และปลอดภัยกว่ามาแนะนำ นั่นคือ Match Expression ครับ ฟีเจอร์นี้ถูกเพิ่มเข้ามาใน PHP 8.0 เพื่อช่วยให้การตรวจสอบเงื่อนไขและคืนค่า (Return Value) ทำได้คลีนขึ้นมาก
💡 Match Expression คืออะไร?
match เป็นโครงสร้างควบคุมเงื่อนไขที่คล้ายกับ switch แต่ทำงานในลักษณะของ Expression (หมายความว่ามันสามารถคืนค่าออกมาใส่ในตัวแปรได้โดยตรง) และใช้การเปรียบเทียบค่าแบบ Strict Comparison (===) ซึ่งปลอดภัยกว่า switch ที่ใช้แบบ ==
⚔️ เปรียบเทียบช็อตต่อช็อต: Switch vs Match
เพื่อให้เห็นภาพชัดเจน ลองมาดูโจทย์เดียวกัน: ต้องการแปลงรหัสสถานะ HTTP เป็นข้อความ
แบบเดิม: Switch Case
switch ($statusCode) {
case 200:
$message = 'OK';
break;
case 404:
$message = 'Not Found';
break;
case 500:
$message = 'Internal Server Error';
break;
default:
$message = 'Unknown Status';
break;
}
ปัญหาของ Switch: เขียนยาว, ต้องใส่ break; ทุกครั้ง (ถ้าลืม บั๊กทันที), และต้องคอยกำหนดค่าให้ตัวแปร $message ซ้ำ ๆ
แบบใหม่: Match Expression
$message = match ($statusCode) {
200 => 'OK',
404 => 'Not Found',
500 => 'Internal Server Error',
default => 'Unknown Status',
};
สิ่งที่ดียิ่งกว่า: สั้นกระชับ, ส่งค่ากลับไปที่ $message ได้ทันที, และไม่ต้องกลัวเรื่องลืมใส่ break
🚀 3 ฟีเจอร์เด่นของ Match Expression ที่คุณต้องรู้
1. การเปรียบเทียบแบบแม่นยำ (Strict Comparison)
switch จะมองว่า 0 เท่ากับ '0' หรือ false แต่ match จะเช็กประเภทข้อมูลด้วย (เหมือนการใช้ ===)
$value = '200';
$result = match ($value) {
200 => 'This is integer',
'200' => 'This is string', // จะตกที่เคสนี้อย่างถูกต้อง
};
2. ยุบรวมหลายเงื่อนไขได้ง่ายๆ ด้วยเครื่องหมายจุลภาค (Comma)
ถ้ามีหลายเงื่อนไขที่ต้องการให้ผลลัพธ์เหมือนกัน ไม่ต้องเขียนบรรทัดใหม่ซ้ำ ๆ แค่ใช้ , คั่นได้เลย
$role = 'editor';
$access = match ($role) {
'admin', 'editor', 'author' => 'Allowed to publish',
'subscriber' => 'Read only',
default => 'Denied',
};
3. ต้องมี Default เสมอ (ไม่งั้น Error!)
ถ้าค่าที่ส่งเข้าไปไม่ตรงกับเคสใดเลย และคุณไม่ได้เขียน default ไว้ PHP จะพ่น UnhandledMatchError ออกมาทันที ซึ่งถือเป็นข้อดี เพราะช่วยลดโอกาสเกิดบั๊กลึกลับในระบบ
📝 สรุป: ควรใช้ตอนไหน?
- ใช้ Match เมื่อ: ต้องการตรวจสอบค่าเดี่ยว ๆ แล้วคืนค่า (Return) ผลลัพธ์กลับมาทันที หรือเมื่อต้องการความแม่นยำของประเภทข้อมูล (Strict Checking)
- ใช้ Switch เมื่อ: ต้องการทำ Logic ที่ซับซ้อนภายในแต่ละ Case (มีโค้ดหลายบรรทัดในเคส นั้น ๆ) หรือไม่จำเป็นต้องคืนค่าใด ๆ
ลองหยิบ match ไปปรับใช้ในโปรเจกต์ดูครับ แล้วจะพบว่าโค้ดของคุณอ่านง่ายและปลอดภัยขึ้นอีกเยอะ!
อ่านเพิ่มเติม