לולאת while היא הלולאה הפשוטה ביותר והיא נראית כך:
<?php while (expr)
/*
כל עוד הביטוי expr הוא אמת, נבצע איטרציה נוספת...
*/
{ ... statements; ...
/*
בכל איטרציה אנו מבצעים את הפקודות statements.
*/
} ?>
אופן הפעולה של לולאת while היא פשוטה מאוד. כל עוד (while) הביטוי expr הוא אמת, מבצעים את הקוד (statements). כל ביצוע יחיד של בלוק הקוד נקרא איטרציה (iteration). לאחר כל איטרציה, חוזרים לבדיקת התנאי ומבצעים איטרציה נוספת כל עוד הביטוי הוא אמת, וכך עושים עד אשר הביטוי הוא שקר ואז אנו מפסיקים את הלולאה בלי איטרציה נוספת. במקרה שאנו מגיעים ללולאה ונתקלים בביטוי שקרי כבר מההתחלה, אז הלולאה לא תבצע אף איטרציה.
ישנה גם דרך נוספת לרשום את הלולאה באמצעות while: ו-endwhile לסיום הלולאה.
נביא דוגמא שמדפיסה את המספרים מ-1 ל-10:
<?php $i=1; while ($i<=10)
/*
כל עוד $i קטן או שווה ל-10, אנו נבצע עוד איטרציה...
ע"י קידום $i בכל איטרציה אנו דואגים לכך שבשלב מסויים $i יהיה גדול מ-10, והלולאה תיעצר.
*/
} ?>
חשוב מאוד לדאוג לכך שבשלב מסוים הלולאה תיעצר, אחרת נכנס ללולאה אינסופית שתתקע את התוכנית. במקרה שנכנסים ללולאה אינסופית, התוכנית לא תמשיך לרוץ הרבה זמן, וזאת משום שבקונפיגורציה של PHP מוגדר זמן ריצה מקסימלי של תוכנית, ואם תוכנית רצה מעבר לזמן המוגדר, השרת מפסיק את התוכנית בכוח ומדפיס הודעה בדבר זמן ריצה ארוך מדי.
תגובות בנושא
הסבר מעולה!
04-12-03 07:01 יולו
#788
באמת שכיף מאד לקרוא את המדריכים שלך!
תודה רבה אלי חן שעזרת לי ולעוד הרבה אנשים ללמוד
php
בפשטות..
:)
באמת כיף
07-12-03 06:01 אוהב את האתר הזה!
#950
מדריךקצר ולעיניין....
רק דבר אחד,יש דבר כזה שנקרא gateway timeout, האם זה מה שהזכרת הסבר למעלה?
תקרא שוב
07-12-03 07:01 אלי חן (מנהל)
#967
do...while מבצע איטרציה ראשונה ללא בדיקת תנאי, ואז כל איטרציה נוספת (שניה, שלישית, וכו') מתבצעת רק אם התנאי מתקיים.
while מבצע כל איטרציה (ראשונה, שניה, שלישית, וכו') רק אם התנאי מתקיים.
gateway timeout לא קורה בגלל לולאה אינסופית. זה קורה כאשר בנקודה מסויימת המחברת בין מחשב הלקוח למחשב השרת יש נתק והזמן המוקצב לנסיונות חיבור עבר. זה לא משהו ספציפי ל-PHP, אלא בפעולת האינטרנט.
ל-PHP בדר"כ יש זמן ריצה מוגבל (בדר"כ 30 שניות). כאשר נתקלים בלולאה אינסופית, אז הלולאה רצה שוב ושוב, עד ש-PHP סוגרת את הבאסטה אחרי 30 שניות, וההודעה שאתה מקבל היא שגיאה ב-PHP שהתוכנית עברה את זמן הריצה המקסימלי.
למה זה חנוק לי בשרת ?
09-12-08 06:00 עידן חכים
#2815
הגדרתי אותו לעד 10 והוא לא מפעיל לי את האתר..הוא חנוק..
איך שמחקתי את הקוד אז זה חזר...
והכול בסדר אצלי ב PHP בדקתי ותיקנתי הכולל !!
מי שלא מבין
06-12-09 12:02 אלכס נוסינוב
#2839
אל תעברו האלה
תקראו כל מילה ומילה עד שתבינו באמת קראתי בזילזול לא הבנתי כלום ועכשיו קראתי כמו שצריך ואני חייב להודות שאין פה מה לא להבין.. זה כלכך פשוט