أساسيات PHP

العبارات الشرطية

13 دقيقة الدرس 6 من 45

العبارات الشرطية في PHP

تسمح العبارات الشرطية لشيفرتك باتخاذ القرارات وتنفيذ كتل مختلفة من الكود بناءً على شروط معينة. وهي أساسية لإنشاء تطبيقات ديناميكية ومستجيبة.

عبارة if

تقوم عبارة if بتنفيذ كتلة من الكود فقط إذا كان الشرط المحدد صحيحاً:

<?php $age = 18; if ($age >= 18) { echo "أنت بالغ."; } ?>
ملاحظة: يجب أن يتم تقييم الشرط داخل الأقواس إلى قيمة منطقية (true أو false). تحول PHP تلقائياً الأنواع الأخرى إلى منطقية عند الحاجة.

عبارة if...else

توفر جملة else كتلة بديلة من الكود عندما يكون الشرط خاطئاً:

<?php $temperature = 25; if ($temperature > 30) { echo "الجو حار في الخارج!"; } else { echo "الطقس لطيف."; } ?>

عبارة if...elseif...else

استخدم elseif لاختبار شروط متعددة بالتتابع:

<?php $score = 75; if ($score >= 90) { echo "الدرجة: ممتاز"; } elseif ($score >= 80) { echo "الدرجة: جيد جداً"; } elseif ($score >= 70) { echo "الدرجة: جيد"; } elseif ($score >= 60) { echo "الدرجة: مقبول"; } else { echo "الدرجة: راسب"; } ?>
نصيحة: تقوم PHP بتقييم الشروط من الأعلى إلى الأسفل وتتوقف عند أول شرط صحيح. رتب شروطك من الأكثر تحديداً إلى الأكثر عمومية.

معاملات المقارنة

تُستخدم معاملات المقارنة لمقارنة القيم في العبارات الشرطية:

<?php // يساوي (مقارنة مرنة) if ($a == $b) { } // متطابق تماماً (مقارنة صارمة - تتحقق من القيمة والنوع) if ($a === $b) { } // لا يساوي if ($a != $b) { } if ($a <> $b) { } // غير متطابق if ($a !== $b) { } // أكبر من if ($a > $b) { } // أصغر من if ($a < $b) { } // أكبر من أو يساوي if ($a >= $b) { } // أصغر من أو يساوي if ($a <= $b) { } ?>
تحذير: استخدم === (مقارنة صارمة) بدلاً من == (مقارنة مرنة) لتجنب تحويل النوع غير المتوقع. على سبيل المثال، 0 == "hello" صحيح، لكن 0 === "hello" خاطئ.

المعاملات المنطقية

تسمح لك المعاملات المنطقية بدمج شروط متعددة:

<?php $age = 25; $hasLicense = true; // معامل AND (يجب أن يكون كلا الشرطين صحيحاً) if ($age >= 18 && $hasLicense) { echo "يمكنك القيادة."; } // معامل OR (يجب أن يكون شرط واحد على الأقل صحيحاً) if ($age < 18 || !$hasLicense) { echo "لا يمكنك القيادة."; } // معامل NOT (يعكس الشرط) if (!$hasLicense) { echo "تحتاج إلى رخصة."; } ?>

المعامل الثلاثي

يوفر المعامل الثلاثي طريقة مختصرة لكتابة عبارات if-else البسيطة:

<?php $age = 20; // بناء الجملة الثلاثي: شرط ? قيمة_إذا_صحيح : قيمة_إذا_خاطئ $status = ($age >= 18) ? "بالغ" : "قاصر"; echo $status; // الناتج: بالغ // المكافئ التقليدي if-else: if ($age >= 18) { $status = "بالغ"; } else { $status = "قاصر"; } ?>

معامل الدمج الفارغ

يوفر معامل الدمج الفارغ (??) طريقة نظيفة للتعامل مع القيم غير المعرفة أو الفارغة:

<?php // يرجع القيمة الأولى إذا كانت موجودة وليست فارغة $username = $_GET['name'] ?? 'ضيف'; // يعادل: $username = isset($_GET['name']) ? $_GET['name'] : 'ضيف'; // التسلسل ممكن: $value = $a ?? $b ?? $c ?? 'افتراضي'; ?>
نصيحة: معامل الدمج الفارغ مثالي للتعامل مع مدخلات النماذج الاختيارية أو معاملات URL بشكل آمن.

عبارة switch

عبارة switch مفيدة عندما تحتاج إلى مقارنة متغير مع قيم مختلفة كثيرة:

<?php $day = "الإثنين"; switch ($day) { case "الإثنين": echo "بداية أسبوع العمل"; break; case "الثلاثاء": case "الأربعاء": case "الخميس": echo "منتصف أسبوع العمل"; break; case "الجمعة": echo "آخر يوم عمل!"; break; case "السبت": case "الأحد": echo "عطلة نهاية الأسبوع!"; break; default: echo "يوم غير صالح"; } ?>
تحذير: دائماً قم بتضمين عبارات break في حالات switch لمنع سلوك التساقط (ما لم يكن ذلك مقصوداً). بدون break، يستمر التنفيذ في الحالة التالية.

تعبير Match (PHP 8.0+)

تعبير match هو بديل حديث لـ switch مع مقارنة أكثر صرامة وقيم إرجاع:

<?php $statusCode = 200; $message = match ($statusCode) { 200 => "موافق", 404 => "غير موجود", 500 => "خطأ في الخادم", default => "حالة غير معروفة" }; echo $message; // الناتج: موافق ?>
ملاحظة: على عكس switch، يستخدم match مقارنة صارمة (===) ولا يتطلب عبارات break. كما أنه يرجع قيمة مباشرة.

القيم الصحيحة والخاطئة

في PHP، تعتبر قيم معينة "خاطئة" (تقيّم إلى false) في العبارات الشرطية:

<?php // القيم الخاطئة: if (false) { } // منطقي false if (0) { } // صفر عددي if (0.0) { } // صفر عشري if ("") { } // نص فارغ if ("0") { } // نص "0" if (null) { } // null if ([]) { } // مصفوفة فارغة // كل شيء آخر صحيح: if (true) { } // منطقي true if (1) { } // أرقام غير صفرية if ("hello") { } // نصوص غير فارغة if ([1, 2]) { } // مصفوفات غير فارغة ?>

تمرين تطبيقي

المهمة: إنشاء نظام التحقق من تسجيل الدخول:

  1. عرّف متغيرات لاسم المستخدم وكلمة المرور
  2. تحقق مما إذا كان اسم المستخدم "admin" وكلمة المرور "secret123"
  3. إذا كان كلاهما صحيحاً، اعرض "مرحباً أيها المدير!"
  4. إذا كان اسم المستخدم صحيحاً لكن كلمة المرور خاطئة، اعرض "كلمة مرور غير صالحة"
  5. خلاف ذلك، اعرض "بيانات اعتماد غير صالحة"
  6. إضافة: استخدم متغيراً لتتبع محاولات تسجيل الدخول والقفل بعد 3 محاولات فاشلة

أفضل الممارسات

  • استخدم المقارنة الصارمة (===) لتجنب مشاكل تحويل النوع
  • اجعل الشروط بسيطة وقابلة للقراءة - استخرج المنطق المعقد إلى متغيرات
  • استخدم الإرجاع المبكر لتقليل التداخل: if (!$valid) return;
  • فضّل match على switch في PHP 8+ للحصول على كود أنظف
  • استخدم معامل الدمج الفارغ للقيم الافتراضية
  • تجنب عبارات if المتداخلة بعمق - فكر في إعادة الهيكلة إلى دوال

ES
Edrees Salih
منذ 13 ساعة

We are still cooking the magic in the way!