ساختارهای کنترلی و حلقه ها در PHP – راهنمای جامع


در این راهنما قصد داریم به بررسی ساختارهای کنترلی و حلقهها در PHP بپردازیم. در ادامه شیوه استفاده از همه ساختارهای کنترلی اصلی پشتیبانی شده در PHP مانند if, else, for, foreach, while و موارد دیگر را بررسی میکنیم.
منظور از ساختار کنترلی چیست؟
یک «ساختار کنترلی» (Control Structure) به زبان ساده امکان کنترل گردش اجرای یک کد در اپلیکیشن را فراهم میکند. به طور کلی یک برنامه به طور ترتیبی و خط به خط اجرا میشود و ساختار کنترلی امکان تغییر دادن این گردش را ایجاد میکند. این تغییر گردش معمولاً از طریق بررسی یک شرط خاص صورت میگیرد.
ساختارهای کنترلی جزو ویژگیهای اصلی زبان برنامهنویسی PHP هستند که به اسکریپتها امکان پاسخدهی متفاوت بسته به ورودیها یا موقعیتهای متفاوت را میدهند. بدین ترتیب اسکریپت میتواند بر اساس ورودی کاربر، محتوای یک فایل یا هر نوع داده دیگر پاسخ متفاوتی ایجاد کند.
فلوچارت زیر طرز کار ساختارهای کنترلی در PHP را نمایش میدهد.
همان طور که در نمودار فوق میبینید ابتدا یک شرط بررسی میشود. اگر شرط درست باشد، کد شرطی اجرا خواهد شد. نکته مهمی که باید توجه کنیم این است که پس از اجرای کد شرطی، اجرای کد به طور معمول ادامه مییابد. مثال زیر را در نظر بگیرید.
در مثال فوق برنامه بررسی میکند که آیا کاربر وارد شده است یا نه. بر اساس وضعیت ورود کاربر، برنامه وی را به صفحه Login و یا My Account هدایت میکند. در این مورد ساختار کنترلی با هدایت کاربر به صفحههای متفاوت، اجرای خود را خاتمه میبخشد. این یکی از تواناییهای اساسی زبان PHP محسوب میشود.
PHP از چند ساختار کنترلی پشتیبانی میکند:
- if
- else
- elseif
- switch
- while
- do-while
- for
- foreach
- و موارد دیگر
در ادامه با معرفی مثالهایی، برخی از این ساختارها را بررسی میکنیم. در بخش قبل با مفاهیم مقدماتی ساختارهای کنترلی در PHP و میزان مفید بودن آنها در توسعه اپلیکیشنها آشنا شدیم. در این بخش چند ساختار کنترلی مهم را معرفی میکنیم که به طور روزمره در توسعه اپلیکیشنها مورد استفاده هستند.
ساختار if
سازه if امکان اجرای بخش خاصی از کد در صورت درست بودن یک شرط را فراهم میسازد. در مثال زیر طرز کار عملی این ساختار را مشاهده میکنیم:
<?php $age = 50; if ($age > 30) { echo "Your age is greater than 30!"; } ?>
مثال فوق پیام «!Your age is greater than 30» را نشان میدهد، زیرا مقدار ارزیابی عبارت برابر با true است. در واقع اگر بخواهیم تنها یک عبارت اجرا شود، میتوانیم مثال فوق را به صورت نمایش یافته در قطعه کد زیر و بدون براکت ها بازنویسی کنیم:
<?php $age = 50; if ($age > 30) echo "Your age is greater than 30!"; ?>
از سوی دیگر، اگر لازم باشد بیش از یک عبارت اجرا شود باید از براکت استفاده شود که در قطعه کد زیر مشخص شده است:
<?php if (is_array($user)) { $user_id = isset($user['user_id']) ? $user['user_id'] : ''; $username = isset($user['username']) ? $user['username'] : ''; // and more statements... } ?>
ساختار else
در بخش قبلی ساختار if را بررسی کردیم که امکان اجرای یک بخش از کد در صورت درست بودن یک شرط را فراهم میسازد. در سوی دیگر اگر عبارتی نادرست باشد، آن ساختار کاری انجام نمیدهد. در اغلب موارد ما باید در صورت نادرست بودن یک شرط نیز کاری را اجرا کنیم. این همان جایی است که عبارت else به کار میآید.
عبارت else همواره همراه با if استفاده میشود. اساس کار این عبارت در شبه کد زیر مشخص شده است:
if (expression) { // code is executed if the expression evaluates to TRUE } else { // code is executed if the expression evaluates to FALSE }
اینک مثال قبلی را بازنگری میکنیم تا با طرز کار آن بهتر آشنا شویم:
<?php $age = 50; if ($age < 30) { echo "Your age is less than 30!"; } else { echo "Your age is greater than or equal 30!"; } ?>
بنابراین وقتی دو انتخاب وجود داشته باشد و یکی از آنها باید اجرا شود، میتوانید از ساختار if-else کمک بگیرید.
ساختار Else If
عبارت elseif را میتوان حالت بسط یافتهای از سازه if-else دانست. اگر بیش از دو انتخاب داشته باشید، میتوانید از عبارت elseif استفاده کنید.
ساختار اساسی عبارت elseif را میتوانید در شبه کد زیر بررسی کنید:
if (expression1) { // code is executed if the expression1 evaluates to TRUE } elseif (expression2) { // code is executed if the expression2 evaluates to TRUE } elseif (expression3) { // code is executed if the expression3 evaluates to TRUE } else { // code is executed if the expression1, expression2 and expression3 evaluates to FALSE, a default choice }
در این مورد نیز طرز کار آن را با استفاده از یک مثال عملی بررسی میکنیم:
<?php $age = 50; if ($age < 30) { echo "Your age is less than 30!"; } elseif ($age > 30 && $age < 40) { echo "Your age is between 30 and 40!"; } elseif ($age > 40 && $age < 50) { echo "Your age is between 40 and 50!"; } else { echo "Your age is greater than 50!"; } ?>
همان طور که در مثال فوق میبینید، ما چند شرط داریم و از این رو از یک سری عبارت elseif استفاده میکنیم. در صورتی که همه شرطهای if نادرست باشند، این سازه کد ارائه شده در بخش else را اجرا میکند.
ساختار Switch
عبارت Switch تا حدودی شبیه عبارت elseif است که در بخش قبلی معرفی کردیم. تنها تفاوت در عبارتی است که بررسی میشود.
در مورد عبارت elseif باید مجموعهای از شرطهای مختلف را تعیین کنیم تا بر اساس هر شرط خاص، اقدام مناسبی اجرا شود. از سوی دیگر اگر بخواهیم یک متغیر را با مقادیر مختلف مقایسه کنیم، میتوانیم از عبارت Switch استفاده کنیم.
به طور معمول استفاده از مثال بهترین روش برای درک عبارت Switch است:
<?php $favourite_site = 'Code'; switch ($favourite_site) { case 'Business': echo "My favourite site is business.tutsplus.com!"; break; case 'Code': echo "My favourite site is code.tutsplus.com!"; break; case 'Web Design': echo "My favourite site is webdesign.tutsplus.com!"; break; case 'Music': echo "My favourite site is music.tutsplus.com!"; break; case 'Photography': echo "My favourite site is photography.tutsplus.com!"; break; default: echo "I like everything at tutsplus.com!"; } ?>
همان طور که در مثال فوق مشخص است، ما میخواهیم مقدار متغیر favourite_site$ را بررسی کنیم و بر اساس مقدار favourite_site$ پیام متناسبی را نمایش دهیم.
برای هر مقداری از متغیر favourite_site$ که قصد دارید بررسی کنید باید بلوک case متناسبی را تعریف کنیم. اگر این مقدار با یک case مطابقت داشته باشید، کد مرتبط با بلوک کد اجرا خواهد شد. پس از آن باید از عبارت break برای خاتمه بخشیدن به اجرای کد استفاده کنید. اگر از عبارت break استفاده نکنید، اسکریپت به اجرای خود تا آخرین بلوک در عبارت Switch ادامه میدهد.
در نهایت اگر بخواهید بخش خاصی از کد را هنگامی که هیچ یک از مقادیر متغیر مطابقت نداشتند اجرا کنید، میتوانید آن را در بلوک default تعریف کنید. البته این وضعیت اجباری نیست و تنها روشی اختیاری برای ارائه وضعیت پیشفرض محسوب میشود.
بدین ترتیب ساختارهای کنترلی در PHP پایان مییابند. در ادامه حلقهها را در PHP بررسی میکنیم.
حلقهها
«حلقهها» (Loops) در PHP در مواردی مورد استفاده قرار میگیرند که بخواهیم بخشی از کد را به طور مکرر تا زمانی که شرطی درست (برقرار) است اجرا کنیم. بدین ترتیب کد تا زمانی که شرط درست باشد، به اجرای خود ادامه میدهد و زمانی که شرط نادرست شد، اسکریپت به اجرای کد در بخش خارج از حلقه ادامه میدهد.
در فلوچارت زیر طرز کار حلقهها در PHP را مشاهده میکنید:
همان طور که در تصویر فوق میبینید، حلقه شامل یک شرط است. اگر شرط درست باشد، کد شرطی اجرایم شود. پس از اجرای کد شرطی، کنترل دوباره به شرط حلقه بازمیگردد و این فرایند تا زمانی که شرط نادرست نشده است تداوم مییابد.
در این بخش انواع مختلف حلقههای PHP را بررسی میکنیم.
حلقه While
حلقه While زمانی استفاده میشود که قرار است بخشی از کد به طور مکرر تا زمانی که شرط while نادرست نشده است، اجرا شود. تعریف این نوع از حلقه را در شبه کد زیر میتوانید مشاهده کنید:
while (expression) { // code to execute as long as expression evaluates to TRUE }
در ادامه مثالی عملی از طرز کار حلقه While در زبان PHP را مشاهده میکنید:
<?php $max = 0; echo $i = 0; echo ","; echo $j = 1; echo ","; $result=0; while ($max < 10 ) { $result = $i + $j; $i = $j; $j = $result; $max = $max + 1; echo $result; echo ","; } ?>
اگر با سری فیبوناچی آشنا باشید ممکن است متوجه شوید که کد فوق چه کاری انجام میدهد. این کد سری فیبوناچی را برای ده عدد نخست محاسبه میکند. حلقه while به طور کلی در زمانهایی که تعداد تکرارهای یک حلقه از قبل مشخص نباشد، مورد استفاده قرار میگیرد.
حلقه Do-While
حلقه Do-While تا حدود زیادی شبیه حلقه While است، تنها تفاوت در این است که شرط این حلقه در انتهای تکرار نخست بررسی میشود. از این رو حلقههای Do-While تحت هر شرایطی صرف نظر از نتیجه عبارت while، دستکم یک بار اجرا خواهند شد. در ادامه ساختار حلقه Do-While را مشاهده میکنید:
do { // code to execute } while (expression);
در ادامه یک مثل عملی از حلقه Do-While را میبینید که کاربردهای احتمالی این نوع از حلقهها را نمایش میدهد:
<?php $handle = fopen("file.txt", "r"); if ($handle) { do { $line = fgets($handle); // process the line content } while($line !== false); } fclose($handle); ?>
در مثال فوق، تلاش میکنیم تا یک فایل را به صورت خط به خط بخوانیم. در ابتدا فایل را برای خواندن باز میکنیم. در این مورد مطمئن نیستیم که آیا فایل اصلاً شامل محتوایی هست یا نه. از این رو تابع fgets دستکم یک بار اجرا میشود تا بررسی کند آیا فایل محتوایی دارد یا نه. بدین ترتیب میتوانیم از حلقه do-while بهره بگیریم. do-while شرط حلقه را در انتهای اجرای اول آن ارزیابی میکند.
حلقه For
به طور کلی حلقه for برای اجرای بخشی از کد به تعداد دفعات معین استفاده میشود. به بیان دیگر اگر از قبل بدانیم که تعداد دفعاتی که یک بخش از کد باید اجرا شود، چند بار است، میتوانیم از حلقه for بدین منظور استفاده کنیم.
در ادامه ساختار حلقه for را مشاهده میکنید:
for (expr1; expr2; expr3) { // code to execute }
عبارت expr1 برای مقداردهی اولیه متغیرها استفاده میشود و همواره اجرا خواهد شد. عبارت expr2 نیز در ابتدای حلقه اجرا میشود و اگر مقدار آن درست (true) ارزیابی شود، کد حلقه اجرا میشود. پس از اجرای کد حلقه عبارت erxpr3 اجرا میشود. به طور کلی expr3 برای تغییر دادن مقدار یک متغیری که در عبارت xpr2 ارائه شده است مورد استفاده قرار میگیرد. در مثال زیر طرز کار آن را مشاهده میکنید:
<?php for ($i=1; $i<=10; ++$i) { echo sprintf("The square of %d is %d.</br>", $i, $i*$i); } ?>
برنامه فوق، مربع ده عدد نخست را نمایش میدهد. این کد مقدار اولیه متغیر i$ را برابر با 1 قرار میدهد و تا زمانی که i$ کمتر مساوی 10 باشد به اجرای کد ادامه میدهد و در هر تکرار یک واحد به i$ میافزاید.
ساختار For Each
حلقه foreach برای تکرار یک چرخه روی متغیرهای آرایه استفاده میشود. اگر یک متغیر آرایه داشته باشید و بخواهید روی همه عناصر آن حلقهای از کد را اجرا کنید، حلقه foreach بهترین انتخاب بدین منظور خواهد بود. در ادامه چند مثال برای کاربردهای این حلقه مشاهده میکنید:
<?php $fruits = array('apple', 'banana', 'orange', 'grapes'); foreach ($fruits as $fruit) { echo $fruit; echo "<br/>"; } $employee = array('name' => 'John Smith', 'age' => 30, 'profession' => 'Software Engineer'); foreach ($employee as $key => $value) { echo sprintf("%s: %s</br>", $key, $value); echo "<br/>"; } ?>
اگر میخواهید به متغیرهای آرایه دسترسی داشته باشید، میتوانید از نسخه اول حلقه foreach در مثال فوق استفاده کنید. در سوی دیگر اگر میخواهید در یک آرایه هم به کلید و هم به مقدار دسترسی داشته باشید، میتوانید به روش نمایش یافته در بخش $employee مثال فوق عمل کنید.
سخن پایانی
در این مقاله به بررسی ساختارهای کنترلی و حلقهها در PHP پرداختیم. این ساختارها بخشی اساسی از PHP و به طور کلی هر زبان برنامهنویسی محسوب میشوند. امیدواریم از مطالعه این راهنما بهره برده باشید، هر گونه دیدگاه یا پیشنهاد خود را میتوانید در بخش نظرات با ما و دیگر خوانندگان فرادرس در میان بگذارید.
اگر این مطلب برایتان مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای طراحی و برنامه نویسی وب
- آموزش برنامه نویسی PHP
- مجموعه آموزش های برنامه نویسی PHP
- برنامهنویسی PHP و هر آنچه برای شروع باید بدانید
- گنجینه برنامه نویسی PHP
==