دستورات شرطی در PHP به شما این امکان را میدهند که بر اساس شرایط خاص، تصمیمگیری کنید. دستور if یکی از پرکاربردترین دستورات شرطی در PHP است که به شما اجازه میدهد تا شرطی را بررسی کرده و در صورت درست بودن آن، یک بخش از کد را اجرا کنید. این دستور میتواند به همراه else و elseif استفاده شود تا اگر شرط اول درست نبود، شرایط دیگری بررسی شوند.
مقدمه
اگر بخواهید بررسی کنید که یک عدد مثبت است یا منفی، میتوانید از دستور if استفاده کنید. به این صورت که ابتدا شرط بررسی میشود که آیا عدد واردشده بزرگتر از صفر است یا نه. اگر این شرط برقرار باشد، پیام مربوط به مثبت بودن عدد نمایش داده میشود. در غیر این صورت، میتوان از دستور else استفاده کرد تا یک پیام متفاوت برای عدد منفی یا صفر نمایش داده شود. همچنین، با استفاده از دستور elseif میتوانید شرایط بیشتری را بررسی کنید.
به این ترتیب میتوان به راحتی منطقهای پیچیدهتری را در برنامهها پیادهسازی کرد، بهطوری که در هر مرحله با توجه به شرایط مختلف، برنامه تصمیمات متفاوتی بگیرد. این انعطافپذیری به شما کمک میکند تا کدهای خود را بهینهتر و کاربردیتر بنویسید. در این آموزش، از سری مقالههای مجله پیاستور با دستورات شرطی در PHP آشنا میشوید که به شما این امکان را میدهد تا بلوکهای کد را بر اساس چندین عبارت بولی اجرا کنید.
دستور if در PHP
دستور if به شما این امکان را میدهد که در صورتی که یک عبارت مقدار true داشته باشد، یک دستور را اجرا کنید. نحوه نوشتار دستور if به شکل زیر است:
<?php if ( expression ) statement;
در این ساختار، PHP ابتدا عبارت را ارزیابی میکند. اگر مقدار عبارت true باشد، PHP دستور را اجرا میکند. اما اگر مقدار عبارت false باشد، PHP از اجرای دستور صرفنظر میکند. نمودار جریان زیر نشان میدهد که دستور if چگونه کار میکند:
مثال زیر از دستور if استفاده میکند تا در صورتی که متغیر is_admin$ مقدار true داشته باشد، یک پیام نمایش داده شود:
<?php $is_admin = true; if ($is_admin) echo 'Welcome, admin!';
از آنجا که is_admin$ مقدار true دارد، اسکریپت پیام زیر را نمایش میدهد:
Welcome, admin!
آکولاد در php
اگر میخواهید چندین دستور را در بلوک if اجرا کنید، میتوانید از آکولاد برای گروهبندی آنها به این شکل استفاده کنید:
<?php if ( expression ) { statement1; statement2; // more statement }
مثال زیر از دستور if استفاده میکند که چندین دستور را اجرا میکند:
<?php $can_edit = false; $is_admin = true; if ( $is_admin ) { echo 'Welcome, admin!'; $can_edit = true; }
در این مثال، دستور if یک پیام نمایش میدهد و متغیر can_edit$ را به true تغییر میدهد، اگر متغیر is_admin$ مقدار true داشته باشد. استفاده از آکولاد با دستور if حتی زمانی که تنها یک دستور برای اجرا وجود دارد، یک رویه خوب است، به این شکل:
<?php if ( expression ) { statement; }
همچنین میتوانید از فاصلهها بین عبارت و آکولادها استفاده کنید تا کد خواناتر شود.
دستور if تو در تو در PHP
امکان استفاده از دستور if درون دستور if دیگر وجود دارد، به این شکل:
<?php if ( expression1 ) { // do something if( expression2 ) { // do other things } }
مثال زیر نشان میدهد که چگونه یک دستور if را درون دستور if دیگری قرار دهیم:
<?php $is_admin = true; $can_approve = true; if ($is_admin) { echo 'Welcome, admin!'; if ($can_approve) { echo 'Please approve the pending items'; } }
قرار دادن دستور if در HTML
برای قرار دادن دستور if در یک سند HTML، میتوانید از ساختار فوق استفاده کنی. با این حال، PHP یک ساختار بهتر ارائه میدهد که به شما این امکان را میدهد که دستور if را به خوبی با HTML ترکیب کنید:
<?php if ( expession) : ?> <!-- HTML code here --> <?php endif; ?>
مثال زیر از دستور if استفاده میکند که لینک ویرایش را نمایش میدهد، اگر متغیر is_admin$ مقدار true داشته باشد:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>PHP if Statement Demo</title> </head> <body> <?php $is_admin = true; ?> <?php if ( $is_admin ) : ?> <a href="#">Edit</a> <?php endif; ?> <a href="#">View</a> </body> </html>
از آنجا که is_admin$ مقدار true دارد، اسکریپت لینک ویرایش را نمایش میدهد. اگر مقدار is_admin$ را به false تغییر دهید، دیگر لینک ویرایش را در خروجی نخواهی دید.
اشتباه رایج دستور if در PHP
یک اشتباه رایج که ممکن است انجام دهید، استفاده از اپراتور اشتباه در دستور if است. به عنوان مثال:
<?php $checked = 'on'; if( $checked = 'off' ) { echo 'The checkbox has not been checked'; }
این اسکریپت یک پیام نمایش میدهد اگر مقدار checked$ برابر با off باشد. با این حال، عبارت داخل دستور if یک انتساب است نه مقایسه:
$checked = 'off'
این عبارت رشته off را به متغیر checked$ اختصاص میدهد و همان متغیر را برمیگرداند. این مقایسهای بین مقدار متغیر checked$ و off انجام نمیدهد. بنابراین، عبارت همیشه مقدار true خواهد داشت که اشتباه است.
برای جلوگیری از این خطا، میتوانید مقدار را قبل از عملگر مقایسه و متغیر را بعد از اپراتور مقایسه قرار دهید، به این شکل:
<?php $checked = 'on'; if('off' == $checked ) { echo 'The checkbox has not been checked'; }
اگر به طور تصادفی از عملگر انتساب (=) استفاده کنید، PHP به جای آن یک خطای نحوی «syntax error» نمایش خواهد داد.
<?php $checked = 'on'; if ('off' = $checked) { echo 'The checkbox has not been checked'; }
خطا:
Parse error: syntax error, unexpected '=' ...
دستور if-else در PHP
دستور if به شما این امکان را میدهد که یک یا چند دستور را زمانی که یک عبارت true باشد، اجرا کنید:
<?php if ( expression ) { // code block }
گاهی اوقات میخواهید یک بلوک کد دیگر را زمانی که عبارت false باشد، اجرا کنید، برای این کار، میتوانید بخش else را به دستور if اضافه کنید:
<?php if ( expression ) { // code block } else { // another code block }
در این ساختار، اگر عبارت true باشد، PHP بلوک کدی که پس از دستور if آمده است را اجرا میکند. اگر عبارت false باشد، PHP بلوک کدی که پس از کلمه کلیدی else آمده است را اجرا میکند. نمودار جریان زیر نشان میدهد که دستور if-else در PHP چگونه کار میکند:
مثال زیر از دستور if…else استفاده میکند تا بر اساس مقدار متغیر is_authenticated$ یک پیام نمایش دهد:
<?php $is_authenticated = false; if ( $is_authenticated ) { echo 'Welcome!'; } else { echo 'You are not authorized to access this page.' }
در این مثال، مقدار is_authenticated$ برابر با false است. بنابراین، اسکریپت بلوک کدی که پس از بخش else آمده است را اجرا میکند. و خروجی زیر نمایش داده میشود:
You are not authorized to access this page.
دستور if else در HTML
مانند دستور if، میتوانید دستور if else را به خوبی با HTML ترکیب کنید، با استفاده از ساختار جایگزین:
<?php if ( expression ): ?> <!--Show HTML code when expression is true --> <?php else: ?> <!--Show HTML code when expression is false --> <?php endif ?>
توجه داشته باشید که نیازی به قرار دادن نقطهویرگول ; بعد از کلمه کلیدی endif نیست، زیرا endif آخرین دستور در بلوک PHP است. تگ بسته ?> به طور خودکار نقطهویرگول را فرض میکند.
مثال زیر از دستور if…else استفاده میکند تا لینک خروج را نمایش دهد اگر is_authenticated$ مقدار true داشته باشد. اگر is_authenticated$ مقدار false داشته باشد، اسکریپت به جای آن لینک ورود را نمایش میدهد:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>PHP if Statement Demo</title> </head> <body> <?php $is_authenticated = true; ?> <?php if ($is_authenticated) : ?> <a href="#">Logout</a> <?php else: ?> <a href="#">Login</a> <?php endif ?> </body> </html>
دستور if elseif در PHP
دستور if یک عبارت را ارزیابی میکند و اگر عبارت true باشد، بلوک کدی را اجرا میکند:
<?php if (expression) { statement; }
دستور if میتواند یک یا چند بخش optional elseif داشته باشد. بخش elseif ترکیبی از دستور if و else است:
<?php if (expression1) { statement; } elseif (expression2) { statement; } elseif (expression3) { statement; }
PHP ابتدا عبارت ۱ را ارزیابی کرده و اگر مقدار آن true باشد، بلوک کد داخل دستور if را اجرا میکند.
اگر عبارت ۱ مقدار false داشته باشد، PHP عبارت ۲ در بخش بعدی elseif را ارزیابی میکند. اگر نتیجه true بود، PHP دستور داخل آن بخش elseif را اجرا میکند. در غیر این صورت، PHP عبارت ۳ را ارزیابی میکند. اگر عبارت ۳ مقدار true داشته باشد، PHP بلوک کدی که پس از بخش elseif آمده است را اجرا میکند. در غیر این صورت، آن را نادیده میگیرد.
توجه داشته باشید که زمانی که دستور if دارای چندین بخش elseif است، بخش elseif تنها زمانی اجرا میشود که عبارت در دستور if یا بخش elseif قبلی مقدار false داشته باشد.
نمودار جریان زیر نشان میدهد که دستور if elseif چگونه کار میکند:
مثال زیر از دستور if elseif استفاده میکند تا نشان دهد آیا متغیر x$ بزرگتر از y$ است:
<?php $x = 10; $y = 20; if ($x > $y) { $message = 'x is greater than y'; } elseif ($x < $y) { $message = 'x is less than y'; } else { $message = 'x is equal to y'; } echo $message;
خروجی:
x is less than y
اسکریپت پیام x is less than y را همانطور که انتظار میرفت، نمایش میدهد.
ساختار جایگزین دستور if elseif در PHP
PHP همچنین یک ساختار جایگزین برای elseif بدون استفاده از آکولادها «curly braces» پشتیبانی میکند، به شکل زیر:
<?php if (expression): statement; elseif (expression2): statement; elseif (expression3): statement; endif;
در این ساختار:
- از نقطهویرگول: بعد از هر شرط پس از کلمهکلیدی if یا elseif استفاده کنید.
- به جای آکولاد بسته } از کلمهکلیدی endif در انتهای دستور if استفاده کنید.
مثال زیر از ساختار جایگزین elseif استفاده میکند:
$x = 10; $y = 20; if ($x > $y) : $message = 'x is greater than y'; elseif ($x < $y): $message = 'x is less than y'; else: $message = 'x is equal to y'; endif; echo $message;
ساختار جایگزین برای استفاده در HTML مناسب است.
دستور elseif در PHP در مقابل else if
PHP به شما این امکان را میدهد که از else if استفاده کنید که همان نتیجه elseif را دارد:
<<?php if (expression) { statement; } else if (expression2) { statement2; }
در این حالت، else if معادل ساختار تو در توی if…else به صورت زیر است:
if (expression) { statement; } else { if (expression2) { statement2; } }
اگر از ساختار جایگزین استفاده کنید، باید از دستور if…elseif به جای if…else if استفاده کنید. در غیر این صورت، با خطا مواجه میشوید.
مثال زیر کار نخواهد کرد و باعث ایجاد خطا میشود:
<?php $x = 10; $y = 20; if ($x > $y) : echo 'x is greater than y'; else if ($x < $y): echo 'x is equal to y'; else: echo 'x is less than y'; endif;
نتیجه گیری
دستورات شرطی در PHP یکی از مهمترین ابزارها برای کنترل جریان اجرای برنامه هستند. با استفاده از این دستورات، میتوان تصمیمگیریهای مختلفی را در کد پیادهسازی کرد و خروجیهای متناسب با شرایط مختلف را تولید کرد. این قابلیت به توسعهدهندگان امکان میدهد که برنامههای تعاملی، هوشمند و کاربرپسند ایجاد کنند. با ترکیب if، else و elseif میتوان منطقهای پیچیده را مدیریت کرد و برنامههایی نوشت که به ورودیها و شرایط متغیر به درستی واکنش نشان دهند.