الحلقات في PHP: for و while و foreach
تخيّل أنك تريد عرض 100 منتج في صفحة متجرك. هل ستكتب echo مئة مرة؟ بالطبع لا. الحلقات (Loops) تجعل البرنامج يكرر نفس الأوامر عدداً من المرات وأنت تكتبها مرة واحدة. وفي PHP بالذات، الحلقات هي الطريقة التي تُبنى بها القوائم والجداول في صفحات المواقع من البيانات.
حلقة for
Section titled “حلقة for”نستخدمها عندما نعرف عدد مرات التكرار مسبقاً:
<?phpfor ($i = 1; $i <= 5; $i++) { echo "الدورة رقم $i\n";}الدورة رقم 1الدورة رقم 2الدورة رقم 3الدورة رقم 4الدورة رقم 5بين القوسين ثلاثة أجزاء مفصولة بفاصلة منقوطة:
- البداية
$i = 1: يُنفَّذ مرة واحدة قبل أول دورة. - الشرط
$i <= 5: يُفحص قبل كل دورة؛ إذا صار خطأ تتوقف الحلقة. - الخطوة
$i++: تُنفَّذ بعد كل دورة، و$i++تعني «زد واحداً».
تخيّلها مثل العدّاد في صالة الرياضة: تبدأ من 1، وتستمر ما دمت لم تصل إلى 5، وتزيد العدّ بعد كل تمرين.
ويمكن أن تكون الخطوة أي قيمة، حتى تنازلية:
<?phpfor ($i = 10; $i >= 0; $i -= 5) { echo $i . "\n";}1050حلقة while
Section titled “حلقة while”نستخدمها عندما لا نعرف عدد المرات، بل نعرف الشرط الذي يجب أن نستمر ما دام صحيحاً:
<?php$balance = 100;$day = 0;
while ($balance > 0) { $balance -= 30; $day++;}
echo "انتهى الرصيد بعد $day أيام";انتهى الرصيد بعد 4 أيامالحلقة تسأل قبل كل دورة: «هل ما زال في الرصيد شيء؟». بعد 4 أيام يصبح الرصيد سالباً، فتتوقف.
حلقة do while
Section titled “حلقة do while”مثل while، لكنها تفحص الشرط بعد الدورة، فتُنفَّذ مرة واحدة على الأقل حتى لو كان الشرط خطأ من البداية:
<?php$n = 10;do { echo "يُنفذ مرة واحدة على الأقل: $n"; $n++;} while ($n < 5);يُنفذ مرة واحدة على الأقل: 10استخدامها نادر، لكنها مفيدة عندما تريد تنفيذ شيء ثم تقرر هل تكرره، مثل إعادة طلب إدخال حتى يكون صحيحاً.
حلقة foreach
Section titled “حلقة foreach”هذه أكثر حلقة ستستخدمها في PHP. تمر على عناصر المصفوفة واحداً واحداً، دون عدّاد ولا شرط:
<?php$fruits = ["تفاح", "موز", "برتقال"];
foreach ($fruits as $fruit) { echo "- $fruit\n";}- تفاح- موز- برتقالاقرأها: «لكل عنصر في $fruits، ضعه في $fruit ونفّذ الكود». ستتعلم المصفوفات بالتفصيل في درس قادم، ومعها صيغة foreach التي تعطيك المفتاح والقيمة معاً.
break و continue
Section titled “break و continue”break: أوقف الحلقة كلها فوراً واخرج منها.continue: تخطَّ باقي الدورة الحالية وانتقل للدورة التالية.
<?phpfor ($i = 1; $i <= 10; $i++) { if ($i % 2 == 0) { continue; // تخطَّ الأرقام الزوجية } if ($i > 7) { break; // توقف بعد 7 } echo $i . " ";}1 3 5 7العامل % يعطي باقي القسمة، فإذا كان باقي قسمة الرقم على 2 صفراً فالرقم زوجي.
الحلقات تبني صفحات HTML
Section titled “الحلقات تبني صفحات HTML”هنا تظهر قوة PHP الحقيقية: الحلقة تولّد HTML تلقائياً:
<?phpecho "<ul>\n";for ($i = 1; $i <= 3; $i++) { echo " <li>الدرس $i</li>\n";}echo "</ul>\n";<ul> <li>الدرس 1</li> <li>الدرس 2</li> <li>الدرس 3</li></ul>تخيّل الآن أن الأرقام تأتي من قاعدة بيانات فيها مئات الدروس: نفس الحلقة ستبني القائمة كلها. وهذا ما ستفعله في آخر درس من الكورس.
جرّب بنفسك
Section titled “جرّب بنفسك”اكتب حلقة تطبع جدول ضرب الرقم 7 من 1 إلى 5:
<?php$num = 7;for ($i = 1; $i <= 5; $i++) { echo "$num × $i = " . ($num * $i) . "\n";}7 × 1 = 77 × 2 = 147 × 3 = 217 × 4 = 287 × 5 = 35تحدٍّ: اكتب حلقة تحسب مجموع الأرقام من 1 إلى 100 في متغير $sum، ثم اطبعه. الناتج الصحيح: 5050.
أخطاء شائعة
Section titled “أخطاء شائعة”- الحلقة اللانهائية: تأكد أن الشرط سيصبح خطأ في لحظة ما.
- الخطأ بواحد (Off-by-one):
$i < 5تتوقف عند 4، و$i <= 5تصل إلى 5. فكّر جيداً في آخر قيمة تريدها. - الفاصلة بدل الفاصلة المنقوطة في for: الأجزاء الثلاثة يفصلها
;وليس,.
اختبر نفسك
Section titled “اختبر نفسك”سؤال
كم مرة تُنفَّذ الحلقة for ($i = 0; $i < 3; $i++)؟
تبدأ من 0 وتتوقف عندما يصبح $i يساوي 3، فتُنفَّذ للقيم 0 و 1 و 2، أي 3 مرات.
سؤال
أي حلقة هي الأنسب للمرور على كل عناصر مصفوفة؟
foreach صُممت للمرور على عناصر المصفوفة مباشرة دون عدّاد أو شرط.
الخلاصة
Section titled “الخلاصة”forعندما تعرف عدد المرات، وفيها بداية وشرط وخطوة.whileتكرر ما دام الشرط صحيحاً، وdo whileتُنفَّذ مرة على الأقل.foreachللمرور على عناصر المصفوفة، وهي الأشهر في PHP.breakتوقف الحلقة، وcontinueتتخطى الدورة الحالية.- الحلقات تولّد HTML من البيانات، وهذا قلب برمجة المواقع بـ PHP.