الجمل الشرطية
لا يقتصر عمل البرنامج على اتباع مسار واحد ثابت فحسب — بل يتعين عليه القيام بأمور مختلفة في ظل ظروف مختلفة. «إذا كان المستخدم قد سجل الدخول، فاعرض ملفه الشخصي؛ وإذا لم يكن كذلك، فاعرض زر تسجيل الدخول» — هذا هو جوهر المنطق الشرطي.
1. عبارة if
أبسط شكل لاتخاذ القرار: تنفيذ كتلة من التعليمات البرمجية عندما يكون الشرط true.
PHP
<?php
$score = 85;
if ($score >= 60) {
echo "You passed!";
}
?>
💡 نصيحة: يتم تحويل الشرط الموجود داخل
if في () في النهاية إلى قيمة منطقية. السلاسل الفارغة، و0، و"0"، وnull، والمصفوفات الفارغة، كلها تُعتبر false — أما كل ما عدا ذلك فيُعتبر true. (راجع قواعد التحويل إلى قيم منطقية في الدرس 4.)
2. عبارة if...else
مسار واحد عندما تكون الحالة صحيحة، ومسار آخر عندما تكون خاطئة:
PHP
<?php
$age = 16;
if ($age >= 18) {
echo "Welcome!";
} else {
echo "Minors are not allowed.";
}
?>
3. if...elseif...else — الفروع المتعددة
PHP
<?php
$score = 85;
if ($score >= 90) {
echo "Excellent";
} elseif ($score >= 80) {
echo "Good";
} elseif ($score >= 70) {
echo "Average";
} elseif ($score >= 60) {
echo "Pass";
} else {
echo "Fail";
}
?>
⚠️ تحذير: تستخدم لغة PHP
elseif (كلمة واحدة)، على الرغم من أن else if (كلمتان) تعمل أيضًا. كلا الصيغتين تعطي نفس النتيجة، لكن elseif هي الصيغة الموصى بها رسميًا.
4. عبارة switch
عندما يكون لديك العديد من الفروع ذات المطابقة التامة، فإن switch تكون أكثر إيجازًا من سلسلة طويلة من if/elseif:
PHP
<?php
$day = "Wednesday";
switch ($day) {
case "Monday":
echo "A new week begins!";
break;
case "Friday":
echo "Weekend is almost here!";
break;
case "Saturday":
case "Sunday":
echo "Enjoy your weekend!";
break;
default:
echo "Keep pushing through the workweek!";
}
?>
| مقال خاص | ملاحظات |
|---|---|
case |
القيمة المراد مقارنتها — تستخدم == للمقارنة غير الدقيقة |
break |
يخرج من المفتاح — وإذا نسيت ذلك، فسيتم الانتقال تلقائيًا إلى الحالة التالية |
default |
يتم تنفيذه في حالة عدم وجود تطابق لأي حالة (اختياري) |
| التخطي المتعمد | حذف break عمدًا عندما تتشارك حالات متعددة في كتلة كود واحدة |
🔥 خطأ شائع: يؤدي نسيان
break إلى حدوث «تجاوز» — أي أن الكود الخاص بالحالة التالية يتم تنفيذه أيضًا! لا تتضمن switch في PHP أمر توقف تلقائي.
5. تعبير «match» (PHP 8.0)
قدمت PHP 8 match، وهو بديل حديث وأكثر أمانًا وأكثر إيجازًا لـ switch:
▶ مثال: match مقابل switch
PHP
<?php
$day = "Wednesday";
$message = match($day) {
"Monday" => "A new week begins!",
"Friday" => "Weekend is almost here!",
"Saturday", "Sunday" => "Enjoy your weekend!",
default => "Keep pushing through the workweek!",
};
echo $message; // Keep pushing through the workweek!
?>
ثلاث مزايا رئيسية لـ match مقارنة بـ switch:
| التبديل | المطابقة | |
|---|---|---|
| المقارنة | == (مرنة) |
=== (صارمة) |
| قيمة الإرجاع | لا شيء (يجب استخدام الأمر break والتعيين يدويًّا) | ✅ تُرجع النتيجة مباشرةً |
| تجاوز | ⚠️ يحدث تجاوز (يحتاج إلى فاصل) | ✅ لا يحدث تجاوز |
| الافتراضي | default (اختياري) |
default (إلزامي، وإلا سيحدث خطأ) |
| شروط متعددة | حيلة «المرور التلقائي» | 'A', 'B' => ... مفصولة بفواصل |
▶ مثال: المقارنة الدقيقة
PHP
<?php
$code = 200;
$httpCode = "200"; // Note: this is a string
// match uses === strict comparison
$result = match($code) {
200 => "Success", // $code === 200 is true
default => "Other",
};
echo $result; // Success
// switch uses == loose comparison — both would match
?>
💡 نصيحة: في إصدارات PHP 8.0 وما فوق، يُفضل استخدام
match. ولا تلجأ إلى switch إلا عندما تحتاج إلى منطق معقد داخل كل حالة (مثل وجود عدة عبارات).
6. دمج الجمل الشرطية مع HTML
هذا هو النمط الأكثر شيوعًا في لغة PHP لصفحات الويب — استخدم الصيغة البديلة لجعل العبارات الشرطية أكثر قابلية للقراءة داخل HTML:
PHP
<?php
$isLogin = true;
?>
<!-- Alternative syntax: colon + endif -->
<?php if ($isLogin): ?>
<div class="user-info">
<img src="avatar.jpg">
<span>Welcome back, John!</span>
<a href="/logout.php">Log out</a>
</div>
<?php else: ?>
<div class="login-btn">
<a href="/login.php">Log in</a>
</div>
<?php endif; ?>
| الصيغة القياسية | الصيغة البديلة (الموصى بها في HTML) |
|---|---|
if () { } |
if (): ... endif; |
if () { } else { } |
if (): ... else: ... endif; |
if () { } elseif () { } else { } |
if (): ... elseif (): ... else: ... endif; |
foreach () { } |
foreach (): ... endforeach; |
while () { } |
while (): ... endwhile; |
for () { } |
for (): ... endfor; |
▶ مثال: الجمع بين الجمل الشرطية و HTML
PHP
<?php
$vip = true;
$balance = 800;
?>
<!DOCTYPE html>
<html>
<body>
<?php if ($vip): ?>
<div class="vip-badge">VIP Member</div>
<?php endif; ?>
<?php if ($balance > 500): ?>
<button>Withdraw Now</button>
<?php elseif ($balance > 0): ?>
<p>Balance is under $500. Withdrawal unavailable.</p>
<?php else: ?>
<p>Balance is zero. Top up to continue!</p>
<?php endif; ?>
</body>
</html>
💡 نصيحة: عند كتابة الجمل الشرطية داخل قوالب HTML، فإن صيغة البديل (
if (): ... endif;) تكون أسهل في القراءة بكثير من الأقواس المتعرجة ({}). فعند استخدام الأقواس المتعرجة، يتعين عليك عد الأزواج لمعرفة أين تنتهي if؛ أما endif; فتجعل ذلك واضحًا على الفور.
❓ أسئلة شائعة
س كيف أختار بين
switch وmatch؟ج في PHP 8.0 وما بعده، يُفضل استخدام
match — فهي أكثر أمانًا (=== مقارنة صارمة)، وأكثر إيجازًا (قيمة إرجاع مباشرة)، ولا تتضمن «تجاوزًا» (fall-through). استخدم switch فقط عندما تحتاج إلى منطق معقد يتضمن عدة جمل داخل كل حالة.س ماذا لو احتوى تعبير «if» الخاص بي على عدد كبير جدًا من مستويات التداخل؟
ج إذا تجاوزت 3 مستويات من التداخل، فقد حان الوقت لإعادة هيكلة الكود. جرب ما يلي: (1) الإرجاع المبكر (جمل الحماية)؛ (2) دمج الشروط في متغير واحد؛ أو (3) استخدام «match» بدلاً من سلاسل «if/elseif» العميقة.
س هل هناك أي فرق بين
else if وelseif؟ج لا يوجد فرق وظيفي.
elseif هي كلمة رئيسية أصلية في لغة PHP (موصى بها). else if هي صيغة متداخلة. وكلاهما يعملان بنفس الطريقة.📖 ملخص
if→elseif→elseتتعامل مع المنطق الشرطي متعدد الفروعswitchتعمل بشكل جيد مع عدة مطابقات دقيقة — تذكر استخدامbreakلمنع «تجاوز» البحثmatch(PHP 8+) أكثر أمانًا من switch (===مقارنة صارمة، لا يحدث تجاوز، تعود مباشرةً)- في قوالب HTML، استخدم صيغة بديلة (
if (): ... endif;) — فهي أسهل في القراءة بكثير من الأقواس المتعرجة - عندما يصبح عدد الشروط كبيرًا جدًّا، فكر في استخدام
matchأوreturnفي المراحل المبكرة لتقليل التداخل
📝 تمارين
- اكتب برنامجًا لتقييم الدرجات: 90+ = A، 80–89 = B، 70–79 = C، 60–69 = D، أقل من 60 = F. قم بتنفيذ البرنامج مرة واحدة باستخدام
if/elseifومرة أخرى باستخدامmatch، ثم قارن بين الطريقتين. - قم بإنشاء صفحة ويب محاكاة تستخدم الصيغة البديلة لعرض محتوى مختلف بناءً على حالة المستخدم: في حالة عدم تسجيل الدخول، يُعرض زر تسجيل الدخول؛ وفي حالة تسجيل الدخول، يُعرض اسم المستخدم ورابط تسجيل الخروج؛ وفي حالة تسجيل الدخول وكون المستخدم عضوًا مميزًا (VIP)، يُعرض أيضًا شارة VIP.
- اكتب برنامجًا للتحقق من السنوات الكبيسة: تكون السنة سنة كبيسة إذا كانت قابلة للقسمة على 4 ولكنها غير قابلة للقسمة على 100، أو إذا كانت قابلة للقسمة على 400.



