حلقة do...while في PHP — الفرق مع while بطريقة عملية
تخيّل أنك تبني خطوة "المحاولة الأولى" في نظام تسجيل دخول: حتى لو الشرط غير مناسب للاستمرار،
تريد تنفيذ المحاولة الأولى مرة واحدة على الأقل. هنا بالضبط تظهر قوة do...while.
فكرة do...while في جملة واحدة
حلقة do...while تعني: "نفّذ أولاً، ثم قرر هل تستمر أم لا".
لذلك هي تضمن تنفيذ الكود مرة واحدة على الأقل.
الصيغة الأساسية
do {
// كود يتنفذ مرة واحدة على الأقل
} while (condition);
لاحظ الفاصلة المنقوطة بعد while (condition); فهي جزء أساسي من الصيغة.
مثال 1: لماذا do...while تختلف عن while؟
الكود:
<?php
$x = 6;
do {
echo "سيتم طباعة هذا السطر مرة واحدة فقط! <br>";
$x++;
} while ($x <= 5);
?>
ما يظهر في المتصفح:
سيتم طباعة هذا السطر مرة واحدة فقط!
شرح الكود: الشرط $x <= 5 خاطئ أصلاً لأن $x = 6.
ومع ذلك تم تنفيذ جسم الحلقة مرة واحدة لأن الفحص يحدث بعد التنفيذ، وليس قبله.
مثال 2: سيناريو أقرب للواقع (عدد المحاولات)
الكود:
<?php
$attempt = 1;
do {
echo "تنفيذ المحاولة رقم: $attempt <br>";
$attempt++;
} while ($attempt <= 3);
?>
ما يظهر في المتصفح:
تنفيذ المحاولة رقم: 1
تنفيذ المحاولة رقم: 2
تنفيذ المحاولة رقم: 3
شرح الكود: بدأنا من 1، وبعد كل دورة زدنا المحاولة بواحد. الحلقة استمرت حتى وصلت المحاولة إلى 4 فأصبح الشرط خاطئاً وتوقفت.
مقارنة سريعة: while vs do...while
| النقطة | while | do...while |
|---|---|---|
| وقت فحص الشرط | قبل التنفيذ | بعد التنفيذ |
| تنفيذ مرة واحدة مضمونة | لا | نعم |
| متى تناسب أكثر | عندما تريد منع التنفيذ إذا الشرط خاطئ | عندما تريد تجربة أولى قبل الفحص |
متى تختار do...while فعلاً؟
- عند الحاجة لتنفيذ خطوة أولى إجبارية مرة واحدة.
- عند بناء منطق "أعد المحاولة طالما الشرط صحيح".
- عند القراءة من مصدر بيانات مع محاولة أولى ثم فحص الاستمرار.
أخطاء شائعة
- نسيان الفاصلة المنقوطة بعد
while (...);. - نسيان تحديث المتغير داخل الحلقة مما يسبب حلقة لا نهائية.
- اختيار do...while رغم أنك لا تريد تنفيذًا أوليًا إلزاميًا.
تمرين سريع
- أنشئ متغيراً
$tries = 1. - اكتب do...while تطبع "محاولة رقم X" حتى 5.
- غيّر البداية إلى
$tries = 10ولاحظ أن الحلقة تنفذ مرة واحدة على الأقل.
الأسئلة الشائعة — FAQ
ما الفرق الأساسي بين while و do...while؟
while تفحص أولاً، أما do...while تنفذ أولاً ثم تفحص.
متى أستخدم do...while؟
عندما تريد تنفيذ الكود مرة واحدة على الأقل قبل التحقق من شرط الاستمرار.
هل do...while قد تدخل في حلقة لا نهائية؟
نعم، إذا لم يتم تحديث المتغيرات التي يعتمد عليها الشرط.
هل يجب كتابة ; بعد while؟
نعم، في do...while الفاصلة المنقوطة في النهاية ضرورية.