แสดงบทความที่มีป้ายกำกับ switch case แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ switch case แสดงบทความทั้งหมด

วันอังคารที่ 1 เมษายน พ.ศ. 2568

PHP ตัดเกรดยังไงให้เทพ! ตัวอย่างโค้ดเข้าใจง่าย พร้อมอธิบายแบบกันเอง

เคยเจอปัญหานี้ไหม? ต้องเขียนโค้ดให้โปรแกรมตัดเกรดนักเรียน แต่ไม่รู้จะเริ่มยังไงดี วันนี้เราจะมาปลดล็อกความเทพด้าน PHP ด้วยตัวอย่างโค้ดตัดเกรดสุดง่าย ที่มือใหม่ก็ทำตามได้!

🎯 ทำความเข้าใจระบบการตัดเกรด

ก่อนจะไปดูโค้ด ลองคิดดูว่าการให้เกรดในโรงเรียนทำงานยังไง? โดยปกติแล้วเราจะกำหนดช่วงคะแนน เช่น

คะแนน (%) เกรด
80 - 100 A
70 - 79 B
60 - 69 C
50 - 59 D
0 - 49 F


หลักการก็คือ เอาคะแนนมาพิจารณาว่าอยู่ในช่วงไหน แล้วให้เกรดตามนั้น


🛠️ ตัวอย่างโค้ด PHP ตัดเกรดแบบพื้นฐาน

มาลองเขียนโค้ดง่าย ๆ กันก่อน เราจะใช้เงื่อนไข if-else เพื่อเช็กว่าคะแนนอยู่ในช่วงไหน

<?php
function getGrade($score) {
    if ($score >= 80) {
        return "A";
    } elseif ($score >= 70) {
        return "B";
    } elseif ($score >= 60) {
        return "C";
    } elseif ($score >= 50) {
        return "D";
    } else {
        return "F";
    }
}

// ทดสอบโค้ด
$scores = [95, 72, 68, 40, 89];
foreach ($scores as $score) {
    echo "คะแนน: $score => เกรด: " . getGrade($score) . "<br>";
}
?>

💡 อธิบายโค้ด

  • เราสร้างฟังก์ชัน getGrade($score) เพื่อรับคะแนนและคืนค่าเป็นเกรด
  • ใช้ if-elseif-else เพื่อเช็กช่วงคะแนน
  • ทดลองใส่คะแนนในอาร์เรย์ แล้ววนลูป foreach เพื่อตัดเกรดทีละตัว


ผลลัพธ์ที่ได้จะเป็นแบบนี้:

คะแนน: 95 => เกรด: A  
คะแนน: 72 => เกรด: B  
คะแนน: 68 => เกรด: C  
คะแนน: 40 => เกรด: F  
คะแนน: 89 => เกรด: A  


🔥 ตัดเกรดหลายคน พร้อมแสดงชื่อ

ถ้าต้องการให้ระบบรองรับนักเรียนหลายคน แสดงชื่อพร้อมเกรด เราสามารถใช้ Associative Array แบบนี้

<?php
$students = [
    "Alice" => 85,
    "Bob" => 74,
    "Charlie" => 90,
    "David" => 45,
    "Eva" => 60
];

foreach ($students as $name => $score) {
    echo "นักเรียน: $name - คะแนน: $score => เกรด: " . getGrade($score) . "<br>";
}
?>

🔹 ความแตกต่างจากโค้ดแรก

  • ใช้ Associative Array ($students) ที่เก็บ ชื่อ => คะแนน
  • วนลูปด้วย foreach โดย key คือชื่อ และ value คือคะแนน


⚡ ตัดเกรดแบบพรีเมียม! ใช้ switch case

อีกวิธีที่อ่านง่ายขึ้นคือใช้ switch case โดยเราจะปัดคะแนนเป็นหลักสิบก่อน แล้วค่อยตรวจสอบ

<?php
function getGradeSwitch($score) {
    switch (true) {
        case ($score >= 80): return "A";
        case ($score >= 70): return "B";
        case ($score >= 60): return "C";
        case ($score >= 50): return "D";
        default: return "F";
    }
}

// ทดสอบโค้ด
$scores = [95, 72, 68, 40, 89];
foreach ($scores as $score) {
    echo "คะแนน: $score => เกรด: " . getGradeSwitch($score) . "<br>";
}
?>

💡 ข้อดีของ switch case
✅ อ่านง่ายกว่า if-else
✅ โค้ดดูสั้นและสะอาด


🎭 ทำให้โค้ดดูโปรมากขึ้น ด้วย Class & OOP

ถ้าอยากทำให้โค้ดดูโปรขึ้น ลองใช้ Class & Object

<?php
class GradingSystem {
    public function getGrade($score) {
        switch (true) {
            case ($score >= 80): return "A";
            case ($score >= 70): return "B";
            case ($score >= 60): return "C";
            case ($score >= 50): return "D";
            default: return "F";
        }
    }
}

// สร้าง Object
$grader = new GradingSystem();

$students = [
    "Alice" => 85,
    "Bob" => 74,
    "Charlie" => 90,
    "David" => 45,
    "Eva" => 60
];

foreach ($students as $name => $score) {
    echo "นักเรียน: $name - คะแนน: $score => เกรด: " . $grader->getGrade($score) . "<br>";
}
?>

✨ ทำไมต้องใช้ OOP?

  • ทำให้โค้ด Reusable (ใช้ซ้ำได้ง่าย)
  • แยกการทำงานเป็นโมดูล ช่วยให้ ดูแลง่ายขึ้น


🎯 บทสรุป

✅ PHP สามารถตัดเกรดได้ง่าย ๆ ด้วย if-else, switch-case หรือ OOP
✅ ใช้ Associative Array เพื่อจัดการข้อมูลนักเรียนหลายคน
✅ ถ้าอยากให้โค้ดดูโปร ลองใช้ Class & Object

👉 ลองนำไปใช้ดู แล้วจะรู้ว่า การตัดเกรดด้วย PHP ง่ายกว่าที่คิด! 🎉

วันพฤหัสบดีที่ 27 กุมภาพันธ์ พ.ศ. 2568

[PHP] หลีกเลี่ยงกับดัก! 5 ข้อผิดพลาดที่พบบ่อยในการใช้ if ใน PHP

if เป็นคำสั่งพื้นฐานของ PHP ที่ใช้กันทุกวัน แต่ถึงจะง่าย ก็ยังมีหลายคนพลาด! บางครั้งโค้ดอาจดูเหมือนถูกต้อง แต่กลับสร้างบั๊กมหาศาล หรือทำให้ประสิทธิภาพตกต่ำแบบไม่รู้ตัว วันนี้เรามาดู 5 ข้อผิดพลาดยอดฮิต ในการใช้ if พร้อมวิธีแก้ไขกัน!

1. เปรียบเทียบค่าแบบหลวม (==) แทนที่จะใช้แบบเคร่งครัด (===)

นี่คือหนึ่งในบั๊กที่เจอบ่อยสุด โดยเฉพาะกับคนที่มาจากภาษาอื่นๆ ที่ไม่ได้สนใจเรื่องประเภทของตัวแปร (type) มากนัก

❌ ตัวอย่างโค้ดผิด

$age = '18'; // เป็น string
if ($age == 18) {  
    echo 'ผ่านเกณฑ์';  
} else {  
    echo 'ไม่ผ่าน';  
}

💥 อันนี้จะพิมพ์ "ผ่านเกณฑ์" ทั้งที่ $age เป็น string ('18') และค่าที่เปรียบเทียบเป็น number (18)
👉 เพราะ == จะพยายามแปลงค่าก่อนเปรียบเทียบ เช่น '18' == 18 หรือ '0' == false จะให้ค่าเป็น true
 

✅ วิธีแก้: ใช้ === เพื่อเช็คทั้งค่าและประเภท

if ($age === 18) {  
    echo 'ผ่านเกณฑ์';  
} else {  
    echo 'ไม่ผ่าน';  
}

💡 แบบนี้ 18 (int) กับ '18' (string) จะถือว่า ไม่เท่ากัน และทำให้เงื่อนไขทำงานถูกต้อง
 

ข้อควรจำ:

  • == → เช็คแค่ค่าตรงกัน (อาจเกิดการแปลงค่าโดยอัตโนมัติ)
  • === → เช็คค่าตรงกันและประเภทตรงกัน


2. ลืมปิด if หรือเปิด {} เมื่อเงื่อนไขมีหลายบรรทัด

PHP อนุญาตให้เขียน if แบบไม่มี {} ได้ ถ้ามีแค่บรรทัดเดียว เช่น:

if ($status === 'active')
    echo 'User is active';

✅ อันนี้ไม่มีปัญหา เพราะมีคำสั่งเดียว

แต่ปัญหาใหญ่คือ ถ้าคุณเพิ่มคำสั่งที่สองโดยไม่ได้ใส่ {}:

❌ ตัวอย่างโค้ดผิด

if ($status === 'active')  
    echo 'User is active';  
    echo 'Send email notification'; // 💥 อันนี้จะทำงานเสมอ!

💥 อันนี้จะพิมพ์ "Send email notification" ตลอด เพราะมันไม่ถูกควบคุมโดย if

✅ วิธีแก้: ใช้ {} ให้ชัดเจนเสมอ

if ($status === 'active') {  
    echo 'User is active';  
    echo 'Send email notification';  
}

💡 ใส่ {} ไปเถอะ ป้องกันบั๊กแบบโง่ๆ ได้เยอะ


3. เช็คค่าที่อาจเป็น null หรือ undefined โดยไม่ใช้ isset() หรือ ??

PHP ไม่เหมือนบางภาษา ถ้าคุณพยายามเข้าถึงตัวแปรที่ไม่มีอยู่ มันจะไม่พัง แต่จะแสดง Warning แทน

❌ ตัวอย่างโค้ดผิด

if ($user['name'] === 'John') { // 💥 ถ้าไม่มี 'name' จะเกิด Warning!
    echo 'Hello John!';
}

💥 ถ้าคีย์ 'name' ไม่มีใน $user จะเกิด Warning และอาจทำให้ระบบพัง

✅ วิธีแก้ 1: ใช้ isset()

if (isset($user['name']) && $user['name'] === 'John') {  
    echo 'Hello John!';
}

✅ วิธีแก้ 2: ใช้ Null Coalescing (??) (PHP 7+)

if (($user['name'] ?? '') === 'John') {  
    echo 'Hello John!';
}

💡 ถ้า 'name' ไม่มีอยู่ มันจะใช้ '' แทน ทำให้ไม่เกิด Error


4. ใช้ if-else ยาวเหยียด แทนที่จะใช้ switch, match หรือ array mapping

❌ ตัวอย่างโค้ดผิด

if ($role === 'admin') {  
    $access = 'Full Access';  
} elseif ($role === 'editor') {  
    $access = 'Edit Content';  
} elseif ($role === 'viewer') {  
    $access = 'Read Only';  
} else {  
    $access = 'No Access';  
}

💥 if-else เยอะๆ แบบนี้อ่านยากและขยายยาก

✅ วิธีแก้ 1: ใช้ switch

switch ($role) {  
    case 'admin': $access = 'Full Access'; break;  
    case 'editor': $access = 'Edit Content'; break;  
    case 'viewer': $access = 'Read Only'; break;  
    default: $access = 'No Access';  
}

✅ วิธีแก้ 2: ใช้ match (PHP 8)

$access = match ($role) {  
    'admin' => 'Full Access',  
    'editor' => 'Edit Content',  
    'viewer' => 'Read Only',  
    default => 'No Access',  
};

✅ วิธีแก้ 3: ใช้ Array Mapping

$roleAccess = [  
    'admin' => 'Full Access',  
    'editor' => 'Edit Content',  
    'viewer' => 'Read Only'  
];  

$access = $roleAccess[$role] ?? 'No Access';

💡 Array Mapping เร็วกว่าและขยายง่ายกว่า


5. ใช้ if เช็คหลายเงื่อนไข แต่ลืม Short-Circuit Evaluation

❌ ตัวอย่างโค้ดผิด

if (isset($user) && $user->isActive && $user->hasPermission()) {  
    echo 'Access granted';
}

💥 ปัญหาคือ ถ้า $user เป็น null ระบบจะแครชทันที เพราะมันพยายามเรียก $user->isActive

✅ วิธีแก้: ใช้ && ให้ฉลาด

if ($user && $user->isActive && $user->hasPermission()) {  
    echo 'Access granted';
}

💡 PHP จะตรวจ $user ก่อน ถ้ามันเป็น null จะไม่เช็คเงื่อนไขที่เหลือ ทำให้ไม่เกิด Error



🎯 สรุป: หลีกเลี่ยงกับดัก if ใน PHP

✅ ใช้ === แทน == เพื่อลดปัญหาการเปรียบเทียบแบบหลวม
✅ ใส่ {} เสมอ ป้องกันบั๊กจาก if หลายบรรทัด
✅ เช็คค่าก่อนใช้ isset() หรือ ??
✅ ใช้ switch, match หรือ array แทน if-else ที่ยาวเกินไป
✅ ใช้ Short-Circuit Evaluation ลดโอกาสเกิด Error

ใครที่เคยพลาดข้อไหนบ้าง? 😆 ลองเอาเทคนิคเหล่านี้ไปใช้ แล้วโค้ด PHP ของคุณจะดูโปรขึ้นแน่นอน! 🚀

วันอังคารที่ 25 กุมภาพันธ์ พ.ศ. 2568

[PHP] 5 เทคนิคเพิ่มความฉลาดให้ if statement ใน PHP

ถ้าคุณเป็นสาย PHP แล้วเคยเขียนโค้ดแบบนี้:

if ($age >= 18) {
    $message = 'สามารถเข้าใช้ระบบได้';
} else {
    $message = 'ขออภัย คุณต้องมีอายุ 18 ปีขึ้นไป';
}

ก็ถึงเวลายกระดับสกิลกันแล้ว! 😎

if เป็นหนึ่งในโครงสร้างที่ใช้บ่อยสุดของ PHP แต่การใช้ if อย่างชาญฉลาดจะช่วยให้โค้ดของคุณ อ่านง่ายขึ้น, ทำงานเร็วขึ้น และดูแพงขึ้น 💎 วันนี้เรามาดู 5 เทคนิคที่จะช่วยเพิ่มพลังให้กับ if statement ของคุณ!

1. ใช้ Ternary Operator (?:) ให้โค้ดสั้นลง

ถ้าเงื่อนไขของคุณแค่กำหนดค่าตัวแปร if-else อาจจะดูเทอะทะไปหน่อย ลองใช้ Ternary Operator (?:) เพื่อให้โค้ดสั้นและดูดีขึ้น


🆚 if-else แบบเดิม

if ($age >= 18) {
    $message = 'สามารถเข้าใช้ระบบได้';
} else {
    $message = 'ขออภัย คุณต้องมีอายุ 18 ปีขึ้นไป';
}

✨ ใช้ Ternary Operator

$message = ($age >= 18) ? 'สามารถเข้าใช้ระบบได้' : 'ขออภัย คุณต้องมีอายุ 18 ปีขึ้นไป';


✅ อ่านง่าย ✅ ลดบรรทัดโค้ด ✅ เร็วขึ้น

ข้อควรระวัง: ถ้าเงื่อนไขซับซ้อนมาก อย่าใช้ Ternary Operator เพราะจะทำให้โค้ดอ่านยาก


2. ใช้ Null Coalescing (??) แทนการเช็คค่า null

ถ้าต้องการตรวจสอบว่าตัวแปรมีค่าหรือไม่ แทนที่จะใช้ if ยาวๆ เราสามารถใช้ Null Coalescing Operator (??) ได้

🆚 if-else เช็คค่า null แบบเดิม

if (isset($_GET['user'])) {
    $user = $_GET['user'];
} else {
    $user = 'Guest';
}

✨ ใช้ Null Coalescing Operator

$user = $_GET['user'] ?? 'Guest';

ทำงานยังไง?

  • ถ้า $_GET['user'] มีค่า → ใช้ค่านั้น
  • ถ้าไม่มี (เช่น ไม่ได้ถูกส่งมา หรือเป็น null) → ใช้ค่า 'Guest' แทน


✅ โค้ดสั้นลง ✅ อ่านง่าย ✅ ใช้ในฟอร์มหรือ API ได้ดี


3. ใช้ Early Return แทน Nested If

การซ้อน if (nested if) เยอะๆ ทำให้โค้ดอ่านยากมาก แถมยังต้องไล่ปิด } เยอะสุดๆ 😵

ลองดูโค้ดนี้:

🆚 Nested If แบบเดิม

function checkUser($user) {
    if ($user) {
        if ($user->isActive) {
            return 'Welcome, ' . $user->name;
        } else {
            return 'บัญชีนี้ถูกปิดใช้งาน';
        }
    } else {
        return 'ไม่พบผู้ใช้';
    }
}

ปัญหา: 👎 อ่านยาก, มีการซ้อน if ไม่จำเป็น

✨ ใช้ Early Return ให้ดูโปร

function checkUser($user) {
    if (!$user) return 'ไม่พบผู้ใช้';
    if (!$user->isActive) return 'บัญชีนี้ถูกปิดใช้งาน';
    
    return 'Welcome, ' . $user->name;
}


✅ โค้ดกระชับ ✅ อ่านง่าย ✅ ลดการซ้อนของ if


4. ใช้ switch หรือ match แทน if-else ที่ยาวเกินไป

ถ้า if-else มีหลายเงื่อนไขแบบนี้:

🆚 if-else ยาวๆ

if ($status === 'pending') {
    $message = 'รอดำเนินการ';
} elseif ($status === 'approved') {
    $message = 'อนุมัติแล้ว';
} elseif ($status === 'rejected') {
    $message = 'ถูกปฏิเสธ';
} else {
    $message = 'สถานะไม่ถูกต้อง';
}

✨ ใช้ switch แทน

switch ($status) {
    case 'pending':
        $message = 'รอดำเนินการ';
        break;
    case 'approved':
        $message = 'อนุมัติแล้ว';
        break;
    case 'rejected':
        $message = 'ถูกปฏิเสธ';
        break;
    default:
        $message = 'สถานะไม่ถูกต้อง';
}

✨ ใช้ match (PHP 8)

$message = match ($status) {
    'pending' => 'รอดำเนินการ',
    'approved' => 'อนุมัติแล้ว',
    'rejected' => 'ถูกปฏิเสธ',
    default => 'สถานะไม่ถูกต้อง',
};

✅ switch/match อ่านง่ายกว่า ✅ เหมาะกับหลายเงื่อนไข


5. ใช้ Array Mapping แทน If-Else

ถ้า if-else แค่แมปค่า เราสามารถใช้ Array Mapping แทนได้

🆚 if-else แบบเดิม


if ($role === 'admin') {
    $permissions = ['edit', 'delete', 'view'];
} elseif ($role === 'editor') {
    $permissions = ['edit', 'view'];
} else {
    $permissions = ['view'];
}

✨ ใช้ Array Mapping


$rolePermissions = [
    'admin' => ['edit', 'delete', 'view'],
    'editor' => ['edit', 'view'],
    'user' => ['view']
];

$permissions = $rolePermissions[$role] ?? ['view'];


✅ ลดโค้ด ✅ อ่านง่าย ✅ ขยายง่าย


🎯 สรุป: เทคนิคเพิ่มความฉลาดให้ if statement

✅ Ternary Operator (?:) → ลดโค้ด if-else ที่กำหนดค่า
✅ Null Coalescing (??) → เช็คค่า null แบบง่ายๆ
✅ Early Return → ลด nested if เพื่อให้โค้ดดูสะอาด
✅ ใช้ switch หรือ match → แทน if-else ที่ยาวเกินไป
✅ Array Mapping → ลดการใช้ if-else สำหรับการแมปค่า

ลองนำเทคนิคเหล่านี้ไปใช้ แล้วโค้ด PHP ของคุณจะดูโปรขึ้นอีกระดับ! 🚀

วันอาทิตย์ที่ 23 กุมภาพันธ์ พ.ศ. 2568

[PHP] Magic of Match: ใช้ Match Expression ใน PHP 8 แทน if-else แบบเดิม

ถ้าพูดถึงการเขียนเงื่อนไขใน PHP เชื่อว่าหลายคนต้องนึกถึง if-else เป็นอันดับแรก แต่พอเงื่อนไขเยอะขึ้น โค้ดก็เริ่มรก ยาวเป็นหางว่าว และอ่านยากสุดๆ

แต่เดี๋ยวก่อน! PHP 8 มาพร้อมกับพระเอกตัวใหม่ที่ชื่อว่า Match Expression ที่จะมาช่วยให้โค้ดเงื่อนไขของคุณสั้น กระชับ และดูโปรกว่าเดิมหลายเท่า

ในบทความนี้ เราจะมาทำความรู้จักกับ match ว่ามันคืออะไร ใช้ยังไง และทำไมมันถึงเป็นตัวตายตัวแทนของ if-else หรือ switch-case ได้!

🎩 Match Expression คืออะไร?

match เป็น expression ใหม่ใน PHP 8 ที่คล้าย switch แต่มีความสามารถเหนือกว่า เพราะมัน:
✅ สั้นกว่า – เขียนได้กระชับ ไม่ต้องมี break;
✅ เทียบค่าแบบ strict (===) – ไม่ต้องกลัวเรื่อง type conversion แปลกๆ
✅ คืนค่าได้เลย – ใช้ return ค่าได้โดยตรง

ลองดูตัวอย่างนี้ 👇

🆚 if-else แบบเดิม


$grade = 'B';
 
if ($grade === 'A') {
    $message = 'เยี่ยมไปเลย! 🎉';
} elseif ($grade === 'B') {
    $message = 'ดีมาก! 👍';
} elseif ($grade === 'C') {
    $message = 'พอไหว 😅';
} else {
    $message = 'ต้องพยายามอีกนิด 💪';
}
 
echo $message;

โค้ดนี้อ่านง่ายตอนเงื่อนไขน้อยๆ แต่ถ้ามีหลายระดับ ความซับซ้อนจะพุ่งปรี๊ด

✨ ใช้ match ให้สวยและแพงกว่าเดิม


$grade = 'B';

$message = match ($grade) {
    'A' => 'เยี่ยมไปเลย! 🎉',
    'B' => 'ดีมาก! 👍',
    'C' => 'พอไหว 😅',
    default => 'ต้องพยายามอีกนิด 💪',
};

echo $message;


เห็นไหม? match ทำให้โค้ดสั้นลง อ่านง่ายขึ้น ไม่ต้องพึ่ง break; หรือ return หลายบรรทัด


🔥 ข้อดีของ Match ที่เหนือกว่า If-Else และ Switch

1. Strict Comparison (===) ในตัว

match ใช้การเปรียบเทียบแบบ strict (===) ต่างจาก switch ที่ใช้ loose comparison (==)
 

🛑 switch มีปัญหาอะไร?

$value = '1';

switch ($value) {
    case 1:
        echo 'Yes';
        break;
    default:
        echo 'No';
}

💥 อันนี้จะแสดง Yes เพราะ switch เปรียบเทียบแบบ loose (==) ทำให้ '1' เท่ากับ 1


✅ match แก้ปัญหานี้ได้


$value = '1';

echo match ($value) {
    1 => 'Yes',
    default => 'No',
};


✨ อันนี้จะออก No เพราะ match ใช้ === ทำให้ '1' กับ 1 ไม่เท่ากัน

2. คืนค่าได้ทันที (Expression-based)

match สามารถ return ค่าออกมาได้เลย ไม่ต้องสร้างตัวแปรก่อน เช่น

function getDiscount($membership) {
    return match ($membership) {
        'gold' => 20,
        'silver' => 10,
        'bronze' => 5,
        default => 0,
    };
}

echo getDiscount('gold'); // 20


แต่ถ้าเป็น switch หรือ if-else ต้องทำแบบนี้:


function getDiscount($membership) {
    switch ($membership) {
        case 'gold':
            return 20;
        case 'silver':
            return 10;
        case 'bronze':
            return 5;
        default:
            return 0;
    }
}

👆 เยอะกว่ากันเห็นๆ


3. ใช้หลายเงื่อนไขในบรรทัดเดียว

อยากให้หลายๆ ค่ามีผลลัพธ์เหมือนกัน? ทำได้ง่ายๆ

$category = 'mango';

$type = match ($category) {
    'apple', 'mango', 'banana' => 'fruit',
    'carrot', 'spinach' => 'vegetable',
    default => 'unknown',
};

echo $type; // fruit

💡 match รองรับการแมปหลายค่าให้เป็นค่าเดียว

4. ไม่มีปัญหา "ตกเคส" แบบ Switch

switch ถ้าเราลืมใส่ break; อาจเกิดปัญหาการตกเคส เช่น

$color = 'red';

switch ($color) {
    case 'red':
        echo 'Stop!';
    case 'yellow':
        echo 'Slow down!';
    case 'green':
        echo 'Go!';
}

💥 อันนี้จะแสดง Stop!Slow down!Go! เพราะ switch ไม่ได้หยุดที่ case red

แต่ match ไม่มีปัญหานี้ เพราะมันไม่ทำงานแบบ fallthrough

$color = 'red';

echo match ($color) {
    'red' => 'Stop!',
    'yellow' => 'Slow down!',
    'green' => 'Go!',
};

✅ แสดงแค่ Stop! ถูกต้องเป๊ะ!


🤔 เมื่อไหร่ควรใช้ Match?

    ✅ เมื่อมีการแมปค่าตรงๆ (mapping values)
    ✅ เมื่ออยากให้โค้ดสั้น กระชับ อ่านง่าย
    ✅ เมื่ออยากได้ strict comparison (===)

แต่! match ไม่สามารถใช้เงื่อนไขซับซ้อนแบบ if-else ได้ เช่น

$age = 20;

$category = match (true) { // ❌ ไม่เวิร์คแบบนี้
    $age < 18 => 'เด็ก',
    $age >= 18 && $age < 60 => 'ผู้ใหญ่',
    default => 'ผู้สูงอายุ',
};

💥 แบบนี้ match จะ error เพราะมันไม่ได้ออกแบบมาให้ใช้เงื่อนไขที่ซับซ้อนแบบนี้



🎯 สรุป: Match ดีกว่า If-Else และ Switch ยังไง?

✅ โค้ดสั้น กระชับ อ่านง่าย
✅ ใช้ === ป้องกันปัญหาประเภทข้อมูล
✅ คืนค่าได้เลย (expression-based)
✅ ไม่มีปัญหาตกเคสแบบ switch
✅ รองรับหลายค่าในเงื่อนไขเดียว

แต่ก็มีข้อจำกัดตรงที่ไม่รองรับเงื่อนไขที่ซับซ้อนเกินไป

ใครที่ยังใช้ if-else หรือ switch กันอยู่ ลองปรับมาใช้ match ดู รับรองว่าโค้ดดูแพงขึ้นแน่นอน! 🚀