والآن سنبدأ بشرح الجملتين الأخيرتين من الجمل التكرارية .... أرجو أن تكونوا قد قرأتم الدرس السابق بتمعن ، لأن هذا الدرس مبني على السابق .. ولن أتكلم كثيرا هنا ...
فالجملة do ... while هي أخت الجملة while ولكن يوجد فرقين اثنين فقط لا ثالث لهما ...
---------------------------------------------------------------------------

---------------------------------------------------------------------------
كما لاحظنا .. أن الفرق الأول هو أن الجملة while لا نكتب بعدها الفاصلة المنقوطة ( ; ) أما في الجملة do .. while فإننا نكتب الفاصلة المنقوطة بعد الجملة while ....
ثم في الجملة while الأوامر المنفذة والمكتوبة بين الأقواس المعقوفة { } تكون بعد الجملة while أم في الجملة do...while تكون قبل الجملة while ....
وهذان هما الفرقان الوحيدان ... ويترتب على هذين الفرقين شيء واحد فقط ... ألا وهو تنفيذ الأمر مرة واحدة على الأقل بغض النظر عن تحقق الشرط أو عدم تحققه .. وهذا في الجملة do..while أما الجملة while فلا يتم التنفيذ إلا بعد تحقق الشرط ...
ما معنى هذا ؟!؟ يبدو أني ( كنفزتكم ) لكن لا مشكلة سنوضح الآن بمثال حي ومباشر من أرض الملعب !
الجملة do تعني ( نفذ ) لذا سيتم تنفيذ الأوامر المكتوبة بعد do وهي مكتوبة قبل while مرة واحدة بدون التأكد من الشرط الموجود داخل الجملة while ... أما في المرة الثانية فما فوق .. فسيتم التحقق من الشرط قبل التكرار ... على عكس الجملة while التي تتأكد من الشرط من أول مرة قبل التكرار ...
على فرض أننا نريد عمل برنامج يقوم بالعد حتى 10 بدءا من قيمة يدخلها الزائر ....
افتحوا ملف جديد وأسموه count.html واكتبوا الكود التالي فيه :
كود:
<html>
<head>
<meta http-equiv="Content-Language" content="ar-jo">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1256">
<title>New Page 1</title>
</head>
<body>
<p align="center" dir="rtl">الرجاء إدخال رقم من (0) إلى (10) :</p>
<form method="POST" action="dowhile.php">
<p align="center" dir="rtl">
<input type="text" name="number" size="20"></p>
<p align="center" dir="rtl"><input type="submit" value="إرسال" name="B1">
<input type="reset" value="مسح" name="B2"></p>
</form>
</body>
</html>
طبعا من الكود يتبين لكم أننا سنبرمج ملف php اسمه : ...... !؟ احزروا ؟!
والآن افتحوا ملف جديد بواسطة php coder .. واكتبوا فيه الجملة do .. wihle ..
---------------------------------------------------------------------------

---------------------------------------------------------------------------
هذا الكود لن يعمل بشكل جيد ... لماذا ؟؟؟
الكود بالمختصر المفيد .. سيأخذ الرقم الذي يدخله الزائر من (0) إلى (10) ثم يبدأ بطباعة الأرقام بدءا من هذا الرقم الذي أدخله وحتى يصل إلى 10 ... فإذا وصل إلى 10 سيتوقف ... ولكن لماذا لن يعمل بشكل جيد ؟!؟ بسيطة .. جرب أن تدخل أي رقم أكبر من 10 ... ستجده يطبعه !! لماذا ؟ لأن الجملة do .. while تنفذ الأمر قبل التأكد من الشرط .. فبالرغم من أن الشرط لم يتحقق أي أن 11 مثلا أكبر من 10 إلى أنه تم طباعة الرقم مرة واحدة .. ثم لم يتكرر الأمر لأن الشرط لم يتحقق في المرة الثانية ...
طبعا لو كتبت الكود بواسطة الجملة while فإنه سيعمل بشكل طبيعي ولن يطبع أي قيمة خطأ ...
ولكن متى تحتاج الجملة do .. while ؟!؟ ... ستحتاجها بالتأكيد عندما تبدأ بكتابة كودات أكثر تعقيدا ...
مثلا أذكر عندما كنت أدرس في الجامعة لغة البرمجة c .. وهي على فكرة أخت الـphp فمن يتقن اللغة c فهو يتقن 90% من php ... طلب مني الدكتور مرة أن نبرمج لعبة ( حجرة ورقة مقص )... ولكنه طلب منا أن ندخل ميزة ( هل يريد المستخدم اللعب مرة أخرى ؟ ) .. فكان الحل ببساطة الجملة do .. while حيث أن المستخدم سيلعب مرة واحدة على الأقل في البداية ثم يتأكد من الشرط ألا وهو هل يريد اللعب مرة أخرى أو لا ؟!؟ فإذا كان اختيار المستخدم (لا) فلن يكرر اللعبة في المرة الثانية !
حسنا نأتي الآن للجملة for وهي جملة مهمة جدا في التكرار .. قبل بدء شرحها أريد أن أبين لكم فرقا جوهريا بين الجملتين do..while و while وبين الجملة for .... ألا وأن الجملة for تكرر الأمر عددا معروفا من المرات ويمكن أيضا أن يكون مجهولا .. بينما while و do..while يكون عدد مرات التكرار مجهولا دائما ...
البنية الأساسية لجملة for هي كالتالي :
كود PHP:
<?php
for(EXP1; CON; EXP2)
{
الأوامر التي سيتكرر تنفيذها
}
?>
الجملة for تأخذ 3 وسيطات أو بارامترات .. يفصل بينها فاصلة منقوطة ( ; ) .. وانتبهوا أن الجملة for لا تحتاج لفاصلة منقوطة في نهايتها .. ثم الأوامر التي يتم تكرارها تأتي بعد الجملة بين أقواس معقوفة إن كانت أكثر من سطر ، اما إن كانت الأوامر المكررة عبارة عن سطر واحد فليس هناك حاجة للأقواس المعقوفة .
والآن نأتي للبارامترات الثلاثة :[*] EXP1 : هنا نكتب القيمة الأولى للعداد .[*] CON : هنا نكتب الشرط الذي يجب أن يتحقق حتى يستمر التكرار .[*] EXP2 : هنا نكتب التغيير الدوري على العداد بدءا من التكرار الثاني .
ماذا تعني كل هذه التخابيص ؟!؟ ألا يدور هذا السؤال بذهنك ؟ أنا متأكد من ذلك ...
حسنا ... سنعود لمثال التوصيل للمنزل delivery.php ونحذف الجملة while ونقوم بنفس العملية ولكن باستخدام الجملة for ...
---------------------------------------------------------------------------

---------------------------------------------------------------------------
قارنوا بين هذه الجملة .. وبين جملة while في الدرس السابق ...
في الوسيطة الأولى قمنا بضبط المتغير distance$ على (5) لأننا سنبدأ من 5 .. ثم في الوسيطة الثانية كتبنا الشرط الذي يجب تحققه حتى يستمر التكرار ، ألا وهو أن تبقى المسافة أقل من او تساوي 25 .. فإن أصبحت المسافة أكبر من 25 فسيتوقف العداد .. ثم الوسيطة الثالثة كتبنا التغيير الدوري للعداد .. حيث أننا في كل تكرار سنزيد 5 على المسافة distance$ أليس كذلك ؟ ولكن كما قلت سابقا فإن هذه الزيادة ستبدأ من التكرار الثاني .. أي أن قيمة distance$ أول مرة ستون كما ضبطناها = (5) ولكن من المرة الثانية فما فوق سيزيد (5) على المسافة distance$ ...
هذا كل ما في الجملة for .. وقبل الانتهاء من الجمل التكرارية سأشرح ث جمل مهمة في العملية التكرارية :
break و continue و exit ...
الجملة break إذا كتبتها داخل التكرار .. سوف توقف العملية والتكرار وتخرج منه .
الجملة continue إذا كتبتها داخل التكرار .. سوف توقف العملية وتنتقل إلى التكرار التالي مباشرة .
الجملة exit إذا كتبتها في أي مكان داخل أو خارج التكرار .. سوف توقف عمل ملف php بأكمله وتخرج منه .
على سبيل المثال .. إذهب لملف order.php واكتب exit في المكان الموضح بالصورة :
---------------------------------------------------------------------------

---------------------------------------------------------------------------
والآن جرب الملف وانظر ماذا يحدث لو لم تقم بطلب شيء !
أما الجملتين break و continue فأترك لك تجربتهما على الملفين dowhile.php و delivery.php وترى بنفسك ماذا تفعلان .. وإن لم تفهمهما فانا موجود ويمكنك ( السؤلاني ) = باللغة الماليزية 
ولله الحمد انتهينا من هذه الوحدة .. وهي في الحقيقة أول ما يمكنك تعلمه في php .. وإذا أتقنت ما تعلمته هنا .. فأنا أعتبرك قد انتقلت من مستوى المبتدئ إلى مستوى المتوسط ....
في المرة القادمة لن أبدأ في الوحدة الجديدة .. بل سأجهز لكم مجموعة من الواجبات والتمارين على هذه الوحدة .. والتي سترسخ ما تعلمناه معا فيها .. فالحقيقة التدريب أهم بكثير من الدراسة .. وإذا لم تقم بتحريك أصابعك على لوحة المفاتيح وكتابة كودات بنفسك .. فلن تتعلم .. كما أشجعكم أن تفركوا بأي شيء وتحاولوا عمله بواسطة ما تعلمته إلى الآن ...
لن تصدقوني إن قلت لكم أنكم تعلمتم إلى الآن 50% من لغة PHP ... ولكن هذا حقيقة وواقع ..
في الوحدة القادمة سأشرح بإذن الله تعالى إن أحيانا لذاك الزمن ... ( تخزين واستخراج البيانات ) .. وبعد شرح تلك الوحدة سنقوم ببرمجة 12 سكريبت !!؟!!؟!! ... تخيلوا .. بعد الوحدة القادمة ستكون قادرا على برمجة 12 سكريبت من أشهر السكريبتات وأكثرها تداولا واستخداما ...
فإلى اللقاء القادم .. وانتظرونا