คำสั่ง Switch และ Match
ใช้ switch และ match ของ PHP 8 สำหรับตรรกะหลายแขนง
คำสั่ง Switch และ Match เป็นบทเรียน PHP Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PHP Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
switch เทียบกับสายโซ่ if
เมื่อมีหลายแขนงที่อิงตามค่าของตัวแปรเดียว switch จะอ่านง่ายกว่าสายโซ่ if/elseif ที่ยาว
PHP 8 เพิ่ม match เป็นทางเลือกสมัยใหม่แบบเคร่งครัด
พื้นฐานคำสั่ง switch
Switch จะประเมินนิพจน์เพียงครั้งเดียว แล้วทำงานในบล็อก case ที่ตรงกัน:
<?php
$day = 'Monday';
switch ($day) {
case 'Monday':
echo 'Start of work week';
break;
case 'Friday':
echo 'Almost weekend';
break;
default:
echo 'Midweek';
}พฤติกรรมการไหลต่อของ switch
หากไม่มี break การทำงานจะไหลต่อไปยัง case ถัดไป ซึ่งเป็นเทคนิคสำหรับจัดกลุ่มกรณีต่าง ๆ โดยตั้งใจ:
<?php
$status = 2;
switch ($status) {
case 1:
case 2:
case 3:
echo 'In progress'; // runs for 1, 2, or 3
break;
case 4:
echo 'Done';
break;
}Switch ใช้การเปรียบเทียบแบบไม่เคร่งครัด
Switch ใช้ == (การเปรียบเทียบแบบไม่เคร่งครัด) ภายใน ซึ่งอาจทำให้จับคู่ได้อย่างน่าประหลาดใจ:
<?php
$val = 0;
switch ($val) {
case 'foo': // 0 == 'foo' in PHP 7!
echo 'match foo';
break;
case 0:
echo 'match zero'; // PHP 8 fixes this
break;
}
// PHP 8: match zero (fixed)
// PHP 7: match foo (bug!)นิพจน์ match ใน PHP 8
match คล้าย switch แต่ใช้การเปรียบเทียบแบบเคร่งครัด คืนค่า และไม่ต้องใช้ break:
<?php
$status = 'active';
$label = match($status) {
'active' => 'Currently active',
'inactive' => 'Not active',
'pending' => 'Awaiting activation',
default => 'Unknown status',
};
echo $label; // Currently activematch เมื่อไม่มีแขนงใดตรงกัน
หากไม่มีแขนงใดตรงกับ match และไม่มี default ระบบจะโยน UnhandledMatchError:
<?php
$code = 99;
try {
$result = match($code) {
200 => 'OK',
404 => 'Not Found',
500 => 'Server Error',
// no default!
};
} catch (\UnhandledMatchError $e) {
echo 'Unhandled match value: ' . $code;
}match ที่มีหลายเงื่อนไข
แขนง match หนึ่งแขนงสามารถระบุค่าหลายค่าโดยคั่นด้วยจุลภาคได้:
<?php
$lang = 'tr';
$region = match($lang) {
'en', 'en-US', 'en-GB' => 'English',
'tr', 'az' => 'Turkic',
'fr', 'be', 'ca' => 'French-speaking',
default => 'Other',
};
echo $region; // Turkicmatch ที่มีนิพจน์ซับซ้อน
แขนงของ match สามารถใช้นิพจน์ใด ๆ ทางด้านขวามือได้:
<?php
$score = 85;
$grade = match(true) {
$score >= 90 => 'A',
$score >= 80 => 'B', // matches
$score >= 70 => 'C',
default => 'F',
};
echo $grade; // Bการคืนค่าจาก match
เนื่องจาก match เป็นนิพจน์ จึงสามารถใช้ได้ทุกที่ที่ต้องการค่า:
<?php
function getHttpMessage(int $code): string {
return match($code) {
200 => 'OK',
201 => 'Created',
400 => 'Bad Request',
401 => 'Unauthorized',
404 => 'Not Found',
default => 'Unknown',
};
}
echo getHttpMessage(404); // Not Foundswitch ในบริบทการคืนค่า
สามารถใช้ switch ภายในฟังก์ชันเพื่อคืนค่าที่แตกต่างกันได้ แต่ match เขียนได้กระชับกว่า:
<?php
function describe(int $n): string {
switch (true) {
case $n < 0: return 'negative';
case $n === 0: return 'zero';
default: return 'positive';
}
}
echo describe(-5); // negative
echo describe(0); // zero
echo describe(7); // positiveควรใช้ switch หรือ match เมื่อใด
แนวทางในการเลือกใช้:
- ใช้
matchเมื่อต้องการการเปรียบเทียบแบบเคร่งครัดและค่าที่ส่งคืน (PHP 8 ขึ้นไป) - ใช้
switchสำหรับการจัดกลุ่มแบบไหลต่อ หรือเมื่อต้องรองรับ PHP 7 - ทั้งสองแบบอ่านง่ายกว่าสายโซ่ if/elseif ที่ยาวเมื่อมีการแบ่งแขนงตามหลายค่า
ตรวจสอบความเข้าใจ
จะเกิดอะไรขึ้นในนิพจน์ match เมื่อไม่มีแขนงใดตรงกันและไม่มี default
สรุป: switch และ match
ความแตกต่างสำคัญ:
switch— การเปรียบเทียบแบบไม่เคร่งครัด การไหลต่อ และรองรับตั้งแต่ PHP 4 ขึ้นไปmatch— การเปรียบเทียบแบบเคร่งครัด ไม่มีการไหลต่อ คืนค่า และรองรับตั้งแต่ PHP 8 ขึ้นไป- match จะโยน
UnhandledMatchErrorเมื่อไม่มี default - แขนงของ match รับค่าหลายค่าโดยคั่นด้วยจุลภาคได้
ถัดไป: ลูป for และ while
คำถามที่พบบ่อย
บทเรียน “คำสั่ง Switch และ Match” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “คำสั่ง Switch และ Match” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PHP Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “คำสั่ง Switch และ Match”
ใช้ switch และ match ของ PHP 8 สำหรับตรรกะหลายแขนง คุณปฏิบัติ PHP Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PHP Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน PHP Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “คำสั่ง Switch และ Match” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน PHP Academy นี้ได้ไหม
ได้ บทเรียน PHP Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- if, elseif และ else
- คำสั่ง Switch และ Match
- ลูป for และ while
- foreach และการควบคุมลูป