به پنجمین جلسه از آموزش برنامه نویسی PHP خوش آمدید. در این جلسه با مبحث دستورات تکرار (حلقه ها) در زبان PHP آشنا خواهیم شد.
دستورات تکرار
هرگاه بخواهیم برخی از دستورات برنامه بیش از یک بار اجرا شوند، از دستورات تکرار استفاده می کنیم. این دستورات در همه زبان های برنامه نویسی موجود است و در ادامه به بررسی هر یک از آنها در زبان PHP خواهیم پرداخت. دستورات تکرار در زبان PHP عبارتند از:
- دستور while
- دستور do..while
- دستور for
دستورات تکرار در PHP
دستور while
الگوی استفاده از دستور while بدین صورت است: ;while (condition) statement
در الگوی فوق عبارت condition همان شرطی است که می بایست تست شود و چنانچه درست باشد، statement اجرا می شود. statement نیز هر دستور قابل اجرایی در زبان PHP است. پس الگوی فوق را بدین شکل می توان تشریح کرد. ابتدا شرط موجود در داخل پرانتز (condition) تست شده و چنانچه ارزش درست داشته باشد، دستورات پس از آن (statement) اجرا خواهند شد. این روند بررسی condition و اجرای statement ادامه خواهد داشت (تکرار خواهد شد)، تا زمانیکه شرط غلط شود. در این صورت کنترل از حلقه خارج شده و به اجرای ادامه برنامه خواهد پرداخت.
به قطعه کد زیر توجه کنید:
1 2 3 4 5 6 7 8 9 10 |
<?php $number = 1; while($number <= 10) { echo "Hello" . "<br>"; $number++; } ?> |
در برنامه بالا در خط ۵ مقدار متغیر number$ تست شده و کوچکتر بودن آن از عدد ۱۰ بررسی می شود. تا زمانیکه شرط درست باشد، پیغام موجود در خط ۶ (کلمه Hello) در خروجی چاپ شد. پس از آن در خط ۷ یک واحد به متغیر number$ (متغیر کنترل حلقه) اضافه می شود. این کار برای پیش بردن مقدار متغیر و بالاخره غلط شدن شرط حلقه در آینده است.
خروجی قطعه کد فوق بدین صورت است:
1 2 3 4 5 6 7 8 9 10 |
Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello |
دستور do..while
دستور do..while دقیقا شبیه دستور while است. با این تفاوت که شرط حلقه به جای ابتدا، در انتهای حلقه بررسی می شود. الگوی استفاده از دستور do..while بدین صورت است: ;(do statement while (condition
در الگوی فوق تا زمانیکه شرط درست باشد، statement اجرا (تکرار) می شود. تنها تفاوت این دستور با دستور while این است که دستورات بدنه حلقه (statement) صرف نظر از درست بودن یا غلط بودن شرط حلقه، حداقل یکبار اجرا می شوند. دلیل این امر این است که ابتدا statement اجرا شده و سپس condition بررسی می شود. به قطعه کد زیر توجه کنید:
1 2 3 4 5 6 7 8 9 10 |
<?php $number = 1; do { echo "Hello" . "<br>"; $number++; } while ($number <= 10); ?> |
برنامه بالا دقیقا همان خروجی برنامه قبل را دارد (۱۰ مرتبه چاپ عبارت Hello در خروجی). تنها تفاوت در زمان بررسی شرط حلقه است. در دستور do..while شرط، به جای ابتدای حلقه، در انتهای حلقه چک می شود.
دستور for
الگوی استفاده از دستور for بدین صورت است: ;for (initialization ; condition ; update) statement
در این الگو condition (شرط حلقه) و statement (هر دستور قابل اجرا) است (مانند قبل). در درون پرانتز دو عبارت initialization و update به چشم می خورد. initialization برای تعریف و یا مقداردهی متغیر کنترل حلقه و update برای جلو بردن و بروزرسانی متغیر کنترل حلقه استفاده می شوند. دقت داشته باشید که بخش های سه گانه درون پرانتز با سمی کالن (;) از هم جدا می شوند.
ترتیب اجرای بخش های ذکر شده در دستور for بدین صورت است:
- ارزیابی عبارت initialization
- بررسی شرط condition (اگر نادرست باشد، حلقه خاتمه می یابد)
- اجرای statement
- ارزیابی عبارت update
- تکرار گام های ۲ تا ۴
برای توضیحات بیشتر به ویدئوی ضمیمه آموزش مراجعه نمایید.
به قطعه کد زیر توجه کنید:
1 2 3 4 5 6 7 |
<?php for($i = 1 ; $i <= 10 ; $i++) { echo "Hello" . "<br>"; } ?> |
برنامه بالا دقیقا همان خروجی قطعه کدهای قبل را دارد (۱۰ مرتبه چاپ عبارت Hello در خروجی).
do..while ، while و یا for ؟
یک سوال؟ هر کدام از دستورات do..while ، while و for را در چه موقعیتی باید استفاده کرد. در حالت کلی این دستورات برتری خاصی نسبت به یکدیگر ندارند و قابل تبدیل و جایگزینی با یکدیگر هستند. ولی به عنوان توصیه، هر زمان که تعداد تکرار دستورات حلقه از قبل مشخص است، بهتر است از دستور for استفاده کنیم. در غیر اینصورت می توان از هر کدام از دستورات while و یا do..while استفاده کرد (زمانیکه تعداد دفعات تکرار از قبل مشخص نیست).
دستور break
دستور break جزو دستورات پرش در زبان PHP است. هرگاه در یک حلقه بخواهیم به محض برقراری یک شرط خاص، از حلقه خارج شویم و از ادامه اجرای آن صرف نظر کنیم، از دستور break (به معنی شکستن) استفاده می کنیم.
به قطعه کد زیر توجه کنید:
1 2 3 4 5 6 7 8 9 |
<?php for($i = 1 ; $i <= 10 ; $i++) { if($i == 5) break; echo $i . "<br>"; } ?> |
در برنامه بالا در خط ۴ مقدار متغیر i$ تست شده و برابر بودن آن با عدد ۵ بررسی می شود. اگر شرط درست باشد، دستور break اجرا شده و ما از حلقه خارج می شویم. این کار باعث می شود که دورهای بعدی حلقه دیگر اجرا نشوند.
خروجی قطعه کد فوق بدین صورت است:
1 2 3 4 |
1 2 3 4 |
در خروجی فوق می بینیم که اعداد ۵ به بعد در خروجی چاپ نشده اند و دلیل آن استفاده از دستور break است.
دستور continue
دستور continue یکی دیگر از دستورات پرش در زبان PHP است. هرگاه در یک حلقه بخواهیم به محض برقراری یک شرط خاص، به دور بعدی حلقه برویم (با صرفنظر از دستورات باقیمانده در ادامه حلقه)، از دستور continue (به معنی ادامه دادن) استفاده می کنیم.
به قطعه کد زیر توجه کنید:
1 2 3 4 5 6 7 8 9 |
<?php for($i = 1 ; $i <= 10 ; $i++) { if($i == 5) continue; echo $i . "<br>"; } ?> |
در برنامه بالا در خط ۴ مقدار متغیر i$ تست شده و برابر بودن آن با عدد ۵ بررسی می شود. اگر شرط درست باشد، دستور continue اجرا شده و ما به دور بعدی حلقه می رویم. این کار باعث می شود که دستورات بعد از آن (echo) دیگر اجرا نشوند.
خروجی قطعه کد فوق بدین صورت است:
1 2 3 4 5 6 7 8 9 |
1 2 3 4 6 7 8 9 10 |
با دقت در خروجی فوق می بینیم که عدد ۵ در بین اعداد وجود ندارد و دلیل آن استفاده از دستور continue است.
به پایان این جلسه آموزشی رسیدیم. در آینده با بخشهای دیگری از زبان PHP آشنا خواهیم شد. با ما همراه باشید…
7 دیدگاه. ارسال دیدگاه جدید
مهندس عالی انشا الله که برامون بمونی مرد بزرگ علم
سلام استاد من میخوام یه حلقه تعریف کنم که برای ۱۰ هزار بار هر ۳ ثانیه یکبار یه کاریو انجام بده، چجوری باید زمان رو براش تعریف کنم؟
دوست عزیز میتونید در درون حلقه از دستور sleep استفاده کنید.
برای مثال دستور ;(sleep(3 باعث توقف ۳ ثانیه ای در اجرای کد میشه.
سلام استاد وقتتون بخیر.
استاد زبان php مثل زبان ++c دستور cin نداره که ورودی بگیره؟
خیر دوست عزیز، از اونجاییکه زبان php خط فرمانی نیست، راه و یا دستوری شبیه cin در ++C براش وجود نداره.
عموما ورودی های صفحات وب از طریق فرمهای html انجام میشه، که انشاا.. در آینده آموزشهایی در این زمینه خواهیم داشت.
سلام مهندس خوبید
مهندس من دیگه به جان آمدم
من برنامهنویسی سی پلاس پلاس رو تا آخر حلقهها بلدم، به همین خاطر php برام خیلی جذاب و روونه، ولی این خروجی ندادن برنامم داره دیوانم می کنه. همه کارهاییم که گفتید کردم بازم یا نات فوند میزنه یا ارور ۴۰۴
فیلتر شکنامم خاموش کردم زدم بازم نشد
چه کنم مهندس؟
چی بگم دوست عزیز
اگر همه مواردی رو که گفتم چک کردید و درست بوده، دلیلی برای عدم خروجی وجود نداره.
نمیدونم، شاید طی یک جلسه ارتباط از راه دور، بتونم کمک کنم که مشکلتون حل بشه.
اگر مایل بودین از طریق ایمیل با من در ارتباط باشید تا راهنماییتون کنم.