دستورهای else، elseif و شرطهای تودرتو
۱. دستور else
در مرحله قبل دیدیم که اگر شرط نادرست باشد، دستورهای داخل if اجرا نمیشوند. گاهی میخواهیم در حالت نادرست نیز دستوری اجرا شود. برای این کار از else استفاده میکنیم.
ساختار:
<?php
if (شرط) {
// دستورهای حالت درست
} else {
// دستورهای حالت نادرست
}
?>
مثال:
<?php
$age = 15;
if ($age >= 18) {
echo "شما اجازه ورود دارید.";
} else {
echo "شما اجازه ورود ندارید.";
}
?>
توضیح:
- شرط
$age >= 18بررسی میشود. - چون مقدار متغیر ۱۵ است، شرط نادرست میشود.
- بنابراین دستورهای داخل
elseاجرا میشوند و پیام «شما اجازه ورود ندارید.» نمایش داده میشود.
نکته: else هیچ شرطی ندارد و همیشه بعد از if میآید.
۲. دستور elseif
گاهی باید چند حالت را بررسی کنیم. برای مثال:
- اگر نمره بزرگتر یا برابر ۱۷ باشد، پیام «عالی» نمایش داده شود.
- اگر نمره بزرگتر یا برابر ۱۰ باشد، پیام «قبول» نمایش داده شود.
- در غیر این صورت، پیام «رد» نمایش داده شود.
برای این کار از elseif استفاده میکنیم.
ساختار:
<?php
if (شرط اول) {
// دستورها
} elseif (شرط دوم) {
// دستورها
} else {
// دستورها
}
?>
مثال:
<?php
$score = 14;
if ($score >= 17) {
echo "عالی";
} elseif ($score >= 10) {
echo "قبول";
} else {
echo "رد";
}
?>
توضیح:
- ابتدا شرط
$score >= 17بررسی میشود. چون نمره ۱۴ است، نادرست میشود. - سپس شرط
$score >= 10بررسی میشود. چون نمره ۱۴ بزرگتر یا برابر ۱۰ است، درست میشود. - دستور داخل
elseifاجرا میشود و پیام «قبول» نمایش داده میشود. - چون یکی از شرطها درست شد،
elseاجرا نمیشود.
نکته مهم: ترتیب شرطها مهم است. شرطها از بالا به پایین بررسی میشوند و به محض درست شدن یک شرط، بقیه شرطها بررسی نمیشوند.
۳. تفاوت elseif و else if
در PHP میتوان elseif را به صورت else if نیز نوشت. از نظر عملکرد تفاوت مهمی برای سطح این جزوه وجود ندارد. برای سادگی و خوانایی، نوشتن elseif توصیه میشود.
مطالعه تکمیلی
در حالتهای خاص، استفاده از else if با آکولادهای جداگانه ممکن است ساختار متفاوتی ایجاد کند. برای دانشآموزان کاردانش، دانستن این جزئیات الزامی نیست. در این جزوه همیشه از elseif استفاده میکنیم.
۴. شرطهای تودرتو
گاهی داخل یک شرط، لازم است شرط دیگری بررسی شود. به این حالت شرط تودرتو میگوییم.
مثال: بررسی ورود کاربر
<?php
$isLoggedIn = true;
$isAdmin = false;
if ($isLoggedIn) {
if ($isAdmin) {
echo "به پنل مدیریت خوش آمدید.";
} else {
echo "به صفحه کاربری خوش آمدید.";
}
} else {
echo "لطفاً ابتدا وارد شوید.";
}
?>
توضیح:
- ابتدا بررسی میشود که کاربر وارد شده است یا نه.
- اگر وارد شده باشد، شرط داخلی بررسی میشود که مدیر است یا نه.
- اگر کاربر وارد نشده باشد، پیام «لطفاً ابتدا وارد شوید.» نمایش داده میشود.
نکته: شرطهای تودرتو نباید بیش از حد استفاده شوند. اگر تعداد شرطها زیاد شود، خوانایی برنامه کم میشود. در ادامه با switch آشنا میشویم که در بعضی موارد جایگزین مناسبتری است.
۵. مثال کاربردی: محاسبه تخفیف
<?php
$amount = 120000;
$discount = 0;
if ($amount >= 100000) {
$discount = 10;
} elseif ($amount >= 50000) {
$discount = 5;
} else {
$discount = 0;
}
echo "تخفیف شما: " . $discount . " درصد";
?>
توضیح:
- اگر مبلغ خرید بزرگتر یا برابر ۱۰۰۰۰۰ باشد، تخفیف ۱۰ درصد است.
- اگر مبلغ بزرگتر یا برابر ۵۰۰۰۰ باشد، تخفیف ۵ درصد است.
- در غیر این صورت، تخفیف صفر است.
۶. خطاهای رایج
-
گذاشتن شرط برای
else
نادرست:else ($age > 10) { ... }
درست:else { ... } -
فراموش کردن آکولاد در
elseif
هر بلوک شرط باید آکولاد باز و بسته داشته باشد. -
اشتباه در ترتیب شرطها
اگر شرط کلیتر را اول بنویسید، شرطهای جزئیتر اجرا نمیشوند.
مثال نادرست:if ($score >= 10) { echo "قبول"; } elseif ($score >= 17) { echo "عالی"; }در این حالت نمره ۱۸ نیز فقط پیام «قبول» میگیرد.
-
فراموش کردن
elseپایانی
در برخی مسائل لازم است حالت پیشفرض نیز مشخص شود. -
استفاده بیرویه از شرط تودرتو
شرطهای تودرتو زیاد، برنامه را پیچیده میکند.
۷. تمرین کلاسی
- برنامهای بنویسید که متغیر
$numberرا تعریف کند. اگر عدد مثبت باشد پیام «مثبت»، اگر صفر باشد پیام «صفر» و در غیر این صورت پیام «منفی» نمایش دهد. - برنامهای بنویسید که سن را در متغیری ذخیره کند. اگر سن کمتر از ۱۸ باشد پیام «نوجوان»، اگر بین ۱۸ تا ۶۵ باشد پیام «بزرگسال» و در غیر این صورت پیام «سالمند» نمایش دهد.
- برنامهای بنویسید که نام کاربری و رمز عبور را بررسی کند. اگر نام کاربری
"admin"و رمز عبور"1234"باشد پیام «ورود موفق» و در غیر این صورت پیام «اطلاعات نادرست» نمایش دهد. از شرط تودرتو یا عملگر منطقی مناسب استفاده کنید. - خطای کد زیر را پیدا کنید:
<?php $score = 18; if ($score >= 10) { echo "قبول"; } elseif ($score >= 17) { echo "عالی"; } ?>