في هذا الدرس 6تصفّح المواضيع
تقوم جملة if بتقييم تعبير منطقي داخل قوسين، وتنفذ كتلة الكود التابعة لها فقط عندما تكون نتيجة التقييم true.
- فضّل دائماً المقارنة الصارمة (
===و!==و>=) داخل شروطifلتفادي التحويل التلقائي المربك للأنواع. - أحِط جسم جملة
ifدائماً بأقواس معقوفة{ ... }حتى لو كان سطراً واحداً لمنع أخطاء الصيانة مستقبلاً. - تدمج الشروط المركبة عدة فحوصات باستخدام المعاملات المنطقية (
&&للربط و||للتخيير) مع التقييم المختصر.
لأن كلاً من $orderTotal >= 200.00 و$isVerified === true يرجع true، ينفذ PHP الكتلة داخل if ثم يكمل السطر التالي.
<?php
$orderTotal = 280.00;
$isVerified = true;
if ($orderTotal >= 200.00 && $isVerified === true) {
echo "Free express shipping unlocked!\n";
}
echo "Checkout step completed.\n";
تُلحق كتلة else مساراً بديلاً مضمون التنفيذ يعمل تلقائياً عندما تكون نتيجة شرط if السابق هي false.
- يتم تنفيذ فرع واحد فقط بالضبط في ثنائية
if / elseفي كل مرة تشغيل؛ لا يُنفذ الاثنان معاً ولا يُترك كلاهما. - لا تقبل كلمة
elseشرطاً بين قوسين؛ بل تلتقط جميع الحالات المتبقية التي لم تحقق الشرط. - في حالات إسناد قيمة بسيطة بدون عمليات جانبية، قارن بين استخدام
if / elseوالمعامل الثلاثي? :.
بما أن الشرط $stockCount > 0 نتيجته false عندما تكون القيمة 0، ينتقل التنفيذ مباشرة إلى كتلة else.
<?php
$stockCount = 0;
if ($stockCount > 0) {
$badge = "In Stock ($stockCount available)";
} else {
$badge = "Out of Stock - Backorder Only";
}
echo $badge . "\n";
عندما يتضمن منطق القرار ثلاث شرائح أو أكثر، اربط الشروط بالتسلسل من الأكثر تخصيصاً إلى الأعم باستخدام elseif.
- يُقيّم PHP شروط
ifوelseifمن الأعلى للأسفل ويتوقف عند أول فرع ترجع نتيجتهtrue. - رتّب فحوصات النطاقات من الأعلى إلى الأدنى (مثل
>= 90قبل>= 75) حتى لا يحجب الشرط الأعم الشروط الأخص. - التزم بمعيار PSR-12 بكتابة الكلمة الموحدة
elseifبدون مسافة بدلاً منelse if.
يختبر PHP الشرط $score >= 90 (خطأ)، ثم يختبر $score >= 80 (صحيح)، فيُسند "B (Merit)" ويتخطى باقي الفروع.
<?php
$score = 84;
if ($score >= 90) {
$grade = "A (Distinction)";
} elseif ($score >= 80) {
$grade = "B (Merit)";
} elseif ($score >= 60) {
$grade = "C (Pass)";
} else {
$grade = "F (Retry)";
}
echo "Score $score -> $grade\n";
إن تداخل جمل if / else لعدة مستويات ("كود السهم") يصعّب القراءة؛ بينما فحص الشروط المسبقة في البداية يبقي المسار الرئيسي مسطحاً وواضحاً.
- افحص الحالات غير الصالحة أو المرفوضة أولاً وعالجها مباشرة بدلاً من حصر مسار العمل الصحيح داخل كتل متداخلة عميقة.
- تجعل الفحوصات المسطحة سبب كل رفض واضحاً ومستقلاً وسهل التتبع عند تصحيح الأخطاء.
- تجنب تداخل الجمل الشرطية لأكثر من مستويين في الأكواد الإنتاجية.
تم عزل كل حالة فشل في المستوى الأول عبر if وelseif، مما أبقى مسار النجاح واضحاً ومباشراً في الفرع الأخير.
<?php
$isActive = true;
$balance = 150.00;
$price = 120.00;
if (!$isActive) {
echo "Error: Account is suspended.\n";
} elseif ($balance < $price) {
echo "Error: Insufficient balance.\n";
} else {
$remaining = $balance - $price;
echo "Payment approved! Remaining: $remaining\n";
}
عند تضمين الشروط داخل قوالب HTML، توفر الصيغة البديلة (if (...): ... endif;) وسوم إغلاق واضحة ومقروءة.
- استبدل قوس الفتح المعقوف
{بنقطتين رأسيتين:، واستبدل قوس الإغلاق}بالكلمةendif;. - استخدم دائماً الكلمة الموحدة
elseif (...):؛ لأن كتابةelse if (...):مع النقطتين تسبب خطأ نحوياً فادحاً (Parse Error). - قصر استخدام صيغة النقطتين على ملفات قوالب العرض HTML فقط، واستخدم الأقواس المعقوفة القياسية
{ }في ملفات PHP البرمجية.
تفتح النقطتان الرأسيتان : كل فرع شرطي، وتغلق endif; البنية الشرطية بالكامل بشكل صريح.
<?php
$role = "editor";
if ($role === "admin"):
$panel = "Full System Console";
elseif ($role === "editor"):
$panel = "Content Publishing Desk";
else:
$panel = "Reader Dashboard";
endif;
echo "Active View: $panel\n";
اختر الصيغة الشرطية الأنسب بناءً على عدد الفروع وما إذا كنت تنفذ أوامر متعددة أو تسند قيمة واحدة.
- استخدم
if / elseif / elseالقياسية عندما تختبر الشروط نطاقات رقمية (>أو<=) أو تعبيرات مركبة. - استخدم المعامل الثلاثي
? :أو معامل دمج الفارغ??لإسناد القيم الافتراضية المختصرة في سطر واحد. - احذر دائماً من كتابة علامة مساواة واحدة عن طريق الخطأ (
if ($a = 5)) داخل قوسي الشرط.
يجمع السكريبت بين فحص النطاق عبر if / else ومعامل ?? لاختيار عنوان بديل عندما يكون $customLabel مساوياً لـ null.
| البنية الشرطية | أفضل حالة استخدام | دعم النطاقات (> / <) | إرجاع قيمة مباشرة |
|---|---|---|---|
if / elseif / else | فحص النطاقات المركبة والشروط المتعددة | نعم | لا (جملة برمجية) |
if : ... endif; | قوالب العرض المدمجة مع HTML | نعم | لا (جملة برمجية) |
$cond ? $a : $b | إسناد قيمة ثنائية مختصرة في سطر واحد | نعم | نعم (تعبير يُرجع قيمة) |
$val ?? $default | توفير قيمة بديلة آمنة عند وجود null | يفحص null فقط | نعم (تعبير يُرجع قيمة) |
<?php
$latencyMs = 42;
$customLabel = null;
if ($latencyMs < 100) {
$health = "Healthy";
} else {
$health = "Degraded";
}
$title = $customLabel ?? "Server Status: $health";
echo "$title ($latencyMs ms)\n";
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
اختر الصيغة الشرطية الأنسب بناءً على عدد الفروع وما إذا كنت تنفذ أوامر متعددة أو تسند قيمة واحدة. استخدم if / elseif / else القياسية عندما تختبر الشروط نطاقات رقمية (> أو <=) أو تعبيرات مركبة. استخدم المعامل الثلاثي ? : أو معامل دمج الفارغ ?? لإسناد القيم الافتراضية المختصرة في سطر واحد. احذر دائماً من كتابة علامة مساواة واحدة عن طريق الخطأ (if ($a = 5)) داخل قوسي الشرط.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 If & Else الجمل الشرطية
- تعلّم الجمل الشرطية if و elseif و else في PHP بأسلوب PHP 8 الحديث مع أمثلة عملية وتطبيقات تفاعلية.
- للمراجعة
- 02 Conditional Execution with if التنفيذ الشرطي بجملة if
- المفهوم الأساسي لقسم التنفيذ الشرطي بجملة if في لغة PHP الحديثة.
- للمراجعة
- 03 Fallback Branch with else مسار التنفيذ البديل بـ else
- الصياغة البرمجية والتطبيق العملي المباشر لقسم مسار التنفيذ البديل بـ else.
- للمراجعة
- 04 Chaining Conditions with elseif تعدد الشروط المتسلسلة بـ elseif
- قواعد التحقق وأفضل الممارسات القياسية الخاصة بقسم تعدد الشروط المتسلسلة بـ elseif.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 PHP PHP
- PHP: Hypertext Preprocessor
- لغة البرمجة النصية على جانب الخادم لبناء تطبيقات الويب الديناميكية وواجهات البرمجة.
- للمراجعة
- 02 CLI CLI
- Command-Line Interface
- واجهة سطر الأوامر التي تتيح تشغيل ملفات PHP مباشرة عبر الطرفية.
- للمراجعة
- 03 FPM FPM
- FastCGI Process Manager
- مدير عمليات FastCGI عالي الأداء لمعالجة طلبات خادم الويب في PHP.
- للمراجعة
- 04 HTML HTML
- HyperText Markup Language
- لغة الترميز القياسية التي يولدها محرك PHP ويرسلها إلى متصفح العميل بعد التنفيذ.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
أنشئ ملف PHP محلياً ونفّذ المثال البرمجي المشروح في قسم التنفيذ الشرطي بجملة if للتحقق من المخرجات.
-
بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم مسار التنفيذ البديل بـ else وقارن مخرجات التنفيذ.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
أي معامل يجب استخدامه داخل شرط if للتحقق من أن $role يساوي "admin" في القيمة والنوع معاً؟
يقارن === القيمة ونوع البيانات معاً دون تحويل تلقائي.
كم فرعاً يتم تنفيذه في سلسلة if / elseif / else الواحدة خلال المرة الواحدة؟
يتوقف PHP عن فحص باقي فروع elseif فور تنفيذ أول فرع يتحقق شرطه.
لماذا يلزم معيار PSR-12 كتابة elseif ككلمة واحدة بدلاً من else if ككلمتين؟
يدعم PHP الكلمة الموحدة elseif فقط عند استخدام صيغة النقطتين.
ماذا يحدث إذا كتبت الشرط if ($score >= 60) قبل elseif ($score >= 90) عندما تكون قيمة $score هي 95؟
لأن 95 >= 60 صحيح، يفوز الفرع الأول ويحجب الشرط الأخص.
ما الكلمة المفتاحية التي تغلق الجملة الشرطية البديلة التي تبدأ بـ if ($isReady): ؟
تغلق endif; كتلة if (...): البديلة.
ما الخطأ البرمجي في كتابة: if ($status = "active") { ... } ؟
علامة = الواحدة تقوم بالإسناد وتُرجع النص غير الفارغ فيُعتبر true دائماً.
في التعبير الشرطي if ($a && $b)، متى يقوم PHP بتقييم الطرف الثاني $b؟
إذا كان $a خاطئاً فالتعبير كله خاطئ حتماً ولذلك يتم تخطي $b.
ما الميزة الأساسية لاستخدام حراس الشروط (Guard Clauses) بدلاً من تداخل جمل if العميق؟
فحص الشروط المسبقة أولاً يلغي التداخل الهرمي المربك.