switch

🔄 ما هي switch في PHP؟

جملة switch تُستخدم لمقارنة قيمة متغير مع عدة احتمالات (حالات)، وتنفيذ الكود الخاص بأول حالة تتطابق.

تشبه سلسلة if...elseif...else لكنها أوضح وأسهل قراءة عندما يكون لدينا العديد من الشروط المقارنة لنفس المتغير.

✅ الشكل العام:
switch (المتغير) {
    case القيمة1:
        // كود يتم تنفيذه إذا كانت المتغير = القيمة1
        break;
        
    case القيمة2:
        // كود يتم تنفيذه إذا كانت المتغير = القيمة2
        break;

    default:
        // كود يتم تنفيذه إذا لم تطابق أي حالة
}
PHP
✅ مثال بسيط:
$color = "أحمر";

switch ($color) {
    case "أحمر":
        echo "اللون هو أحمر";
        break;
    case "أزرق":
        echo "اللون هو أزرق";
        break;
    case "أخضر":
        echo "اللون هو أخضر";
        break;
    default:
        echo "لون غير معروف";
}
PHP
🔎 شرح:
  • يتم مقارنة $color مع كل case.
  • عند تطابق القيمة، يتم تنفيذ الكود المتعلق بها.
  • كلمة break توقف تنفيذ الحالات التالية.
  • إذا لم تتطابق أي حالة، يتم تنفيذ default.
✅ مثال عملي على درجات الطلاب:
$grade = "B";

switch ($grade) {
    case "A":
        echo "ممتاز";
        break;
    case "B":
        echo "جيد جداً";
        break;
    case "C":
        echo "جيد";
        break;
    case "D":
        echo "مقبول";
        break;
    case "F":
        echo "راسب";
        break;
    default:
        echo "درجة غير صالحة";
}
PHP
✅ مثال بدون break (يُنتج ما يسمى بـ Fall-through):
$day = "الجمعة";

switch ($day) {
    case "الخميس":
    case "الجمعة":
        echo "عطلة نهاية الأسبوع";
        break;
    case "السبت":
    case "الأحد":
    case "الاثنين":
    case "الثلاثاء":
    case "الأربعاء":
        echo "يوم عمل";
        break;
    default:
        echo "يوم غير صالح";
}
PHP
🔎 شرح:
  • الحالتان الخميس والجمعة تنفذان نفس الكود.
  • هذا يُستخدم لتجميع حالات متعددة تحت نفس الإجراء.
✅ استخدام switch مع أنواع مختلفة من القيم:
مثال مع الأرقام:
$number = 2;

switch ($number) {
    case 1:
        echo "واحد";
        break;
    case 2:
        echo "اثنان";
        break;
    default:
        echo "رقم غير معروف";
}
PHP
مثال مع Boolean ❌ (غير مفضل):
$status = true;

switch ($status) {
    case true:
        echo "الحالة صحيحة";
        break;
    case false:
        echo "الحالة خاطئة";
        break;
}
PHP

⚠️ ملاحظة: الأفضل استخدام if...else مع القيم المنطقية (true/false)، لأن switch تعتمد على التطابق التام.

✅ أفضل أماكن استخدام switch
الحالةالأفضل استخدام
مقارنة متغير واحد بعدة قيم ثابتة✅ switch
مقارنة شروط مختلفة ومتعددة❌ استخدم if/elseif
عند وجود 3 حالات فأكثر لنفس المتغير✅ switch
الحالات المعتمدة على العمليات❌ استخدم if/elseif
✅ ماذا يحدث إذا نسيت break؟
$fruit = "تفاح";

switch ($fruit) {
    case "تفاح":
        echo "تفاح<br>";
    case "موز":
        echo "موز<br>";
    case "برتقال":
        echo "برتقال<br>";
}
PHP

الناتج:

تفاح
موز
برتقال
PHP

❗ لأنك لم تستخدم break، انتقل البرنامج إلى جميع الحالات التالية.

✅ default في أي مكان؟

نعم. يمكن كتابة default في أي مكان، لكن الأفضل وضعه في النهاية.

✅ switch مقابل match (جديد من PHP 8)

match أسرع وأنظف أحيانًا، ويُعيد القيمة مباشرة بدون break.

$grade = 'B';

echo match($grade) {
    'A' => 'ممتاز',
    'B' => 'جيد جداً',
    'C' => 'جيد',
    default => 'غير معروف',
};
PHP
✅ خلاصة:
  • switch مناسبة إذا كنت تقارن نفس المتغير مع قيم متعددة.
  • تأكد دائمًا من استخدام break حتى لا تنتقل لباقي الحالات.
  • استخدم default لتغطية الحالات غير المتوقعة.
  • لا تستخدمها إذا كانت الشروط تعتمد على عمليات حسابية أو منطقية معقدة.