🚀 اكتشف قوة الـ match Expression في PHP: الطريقة الأحدث لاتخاذ القرارات

اليوم سنتحدث عن ميزة رائعة جداً أُضيفت في الإصدارات الحديثة من لغة PHP (بداية من PHP 8.0)، وهي تعبير match.

إذا كنت قد تعاملت مع جملة switch من قبل، فستجد أن match هي النسخة "المطورة" والأكثر ذكاءً منها. فهي تساعدنا في مقارنة قيمة معينة بمجموعة من الخيارات وإرجاع قيمة بناءً على ذلك، ولكن بطريقة مختصرة جداً ونظيفة. ✨


❓ ما هو الـ match Expression؟

ببساطة، match هي أداة تسمح لنا بمقارنة قيمة (Variable) بمجموعة من القيم المحتملة، وعندما تجد القيمة المطابقة، تقوم بتنفيذ عملية معينة أو إرجاع قيمة محددة.

لماذا نستخدمها بدلاً من switch؟

  1. الاختصار: لا تحتاج لكتابة break بعد كل حالة.
  2. إرجاع القيم: الـ match تعيد قيمة مباشرة يمكنك تخزينها في متغير.
  3. المقارنة الدقيقة: تقوم match بمقارنة "صارمة" (Strict Comparison)، أي أنها تهتم بنوع البيانات (مثلاً الرقم 1 يختلف عن النص "1").

🛠️ الهيكل الأساسي لكتابة match

لكي نستخدم match نتبع التنسيق التالي:

$result = match ($variable) {
    value1 => "Result 1",
    value2 => "Result 2",
    default => "Default Result",
};

شرح المكونات:

  • $variable: هي القيمة التي نريد فحصها.
  • value1, value2: هي القيم المتوقع أن تكون مطابقة للمتغير.
  • =>: السهم الذي يفصل بين "القيمة المطلوبة" و "النتيجة المراد إرجاعها".
  • default: وهو الخيار الذي يتم تنفيذه إذا لم تطابق القيمة أي من الخيارات السابقة (وهو أمر إلزامي في أغلب الحالات لتجنب الأخطاء).
  • ;: لا تنسَ الفاصلة المنقوطة في نهاية القوس الإغلاقي لأن match هنا تعتبر تعبيراً (Expression) وليست مجرد جملة.

💡 أمثلة عملية وبسيطة

دعونا نطبق ذلك بمثال واقعي. تخيل أن لدينا رقم يمثل حالة الطلب (Order Status)، ونريد تحويل هذا الرقم إلى نص مفهوم للمستخدم.

المثال الأول: تحويل الأرقام إلى نصوص 📝

<?php

$status_code = 2; // Let's assume 2 means 'Shipped'

$status_text = match ($status_code) {
    1 => "Pending",    // Order is pending
    2 => "Shipped",    // Order has been shipped
    3 => "Delivered",   // Order delivered successfully
    default => "Unknown Status", // Any other value
};

echo "Order Status: " . $status_text; 
// Output: Order Status: Shipped
?>

لاحظ في هذا الكود:

  • لم نستخدم case ولا break.
  • قمنا بتخزين النتيجة مباشرة في المتغير $status_text.
  • الكود أصبح قصيراً جداً وسهل القراءة. ✅

المثال الثاني: التعامل مع النصوص ✉️

يمكننا أيضاً استخدام match مع النصوص بدلاً من الأرقام، كما في هذا المثال لتحديد اسم اليوم بناءً على اختصاره:

<?php

$day_short = "Mon";

$day_full = match ($day_short) {
    "Mon" => "Monday",
    "Tue" => "Tuesday",
    "Wed" => "Wednesday",
    "Thu" => "Thursday",
    "Fri" => "Friday",
    default => "Invalid Day",
};

echo "The day is: " . $day_full;
// Output: The day is: Monday
?>

⚠️ ملاحظات هامة للمبتدئين

  1. المقارنة الصارمة: إذا كتبت match (1) وكان لديك خيار "1" (كنص)، فلن يتطابقا! لأن match تفرق بين الرقم والنص.
  2. إلزامية الـ default: إذا لم تضع خيار default ولم تجد match أي تطابق، سيقوم PHP بإظهار خطأ من نوع UnhandledMatchError. لذا اجعل default عادة دائمة في كودك. 🛡️

🎯 ملخص الدرس

  • تعلمت أن match هي البديل الحديث والمنظم لـ switch.
  • عرفت أن match تعيد قيمة (Return Value) يمكن تخزينها.
  • اكتشفت أن match لا تحتاج لـ break وتستخدم المقارنة الصارمة.
  • تعلمت أهمية استخدام default لتجنب توقف البرنامج.