سطح B: چهارراههای منطقی
زندگی همیشه فقط دو مسیر ندارد. گاهی در یک چهارراه قرار میگیریم و باید از بین چند گزینه یکی را انتخاب کنیم. در این سطح، یاد میگیریم چطور با ساختارهای if...elseif...else و switch، منطقهای چندشاخهای و پیچیدهتر را در برنامه خود پیادهسازی کنیم.
محتوای آموزشی
۱. ساختار if...elseif...else
این ساختار، نسخهی گسترشیافتهی if...else است و به شما اجازه میدهد چندین شرط را پشت سر هم بررسی کنید. برنامه شرطها را به ترتیب از بالا به پایین میخواند و به محض اینکه به اولین شرط true برسد، بلوک کد مربوط به آن را اجرا کرده و از بقیه ساختار خارج میشود. اگر هیچکدام از شرطها true نباشند، بلوک نهایی else اجرا خواهد شد.
if (شرط اول) {
// اگر شرط اول درست بود
} elseif (شرط دوم) {
// اگر شرط اول غلط بود، اما شرط دوم درست بود
} else {
// اگر هیچکدام از شرطهای بالا درست نبودند
}
۲. ساختار switch
ساختار switch زمانی ایدهآل است که شما میخواهید یک متغیر واحد را با چندین مقدار ممکن مقایسه کنید. این ساختار اغلب خواناتر و منظمتر از چندین elseif تو در تو است.
switch ($variable) {
case value1:
// کدی که اگر $variable == value1 بود اجرا میشود
break;
case value2:
// کدی که اگر $variable == value2 بود اجرا میشود
break;
default:
// کدی که اگر $variable با هیچکدام از caseها برابر نبود اجرا میشود
}
case: هرcaseیک مقدار ممکن برای متغیر را بررسی میکند.break: این دستور بسیار حیاتی است!breakبه PHP میگوید که پس از اجرای کد یکcase، باید از ساختارswitchخارج شود. اگرbreakرا فراموش کنید، PHP اجرای کد را تاcaseبعدی ادامه میدهد.default: این بخش معادلelseدر ساختارifاست و زمانی اجرا میشود که مقدار متغیر با هیچکدام ازcaseها مطابقت نداشته باشد.
کارگاه عملی: سیستم نمرهدهی و پیام روز هفته
در این مثال ترکیبی، ابتدا با if...elseif...else وضعیت نمره دانشآموز را مشخص میکنیم و سپس با switch، یک پیام انگیزشی بر اساس روز هفته نمایش میدهیم.
<?php
// بخش اول: سیستم نمرهدهی
$score = 88;
$grade_status = '';
if ($score >= 90) {
$grade_status = 'عالی (A)';
} elseif ($score >= 80) {
$grade_status = 'خیلی خوب (B)';
} elseif ($score >= 70) {
$grade_status = 'خوب (C)';
} elseif ($score >= 60) {
$grade_status = 'قابل قبول (D)';
} else {
$grade_status = 'نیاز به تلاش بیشتر (F)';
}
echo "نمره شما: $score - وضعیت: <strong>$grade_status</strong>";
echo "<hr>";
// بخش دوم: پیام روز هفته
$today = 'Thursday'; // میتوانید مقادیر دیگر مثل 'Sunday' یا 'Friday' را تست کنید
$daily_message = '';
switch ($today) {
case 'Saturday':
$daily_message = 'شروع هفتهای پر انرژی!';
break;
case 'Sunday':
case 'Monday':
case 'Tuesday':
$daily_message = 'وسط هفتهاید، قوی ادامه دهید!';
break;
case 'Wednesday':
$daily_message = 'فقط دو روز تا آخر هفته باقیست!';
break;
case 'Thursday':
case 'Friday':
$daily_message = 'آخر هفته خوبی داشته باشید!';
break;
default:
$daily_message = 'روز نامعتبر است.';
}
echo "امروز $today است. پیام روز: <strong>$daily_message</strong>";
?>
تمرین شما
صورت تمرین:
- ربات راهنمای کاربر: یک متغیر به نام
$user_roleتعریف کنید که میتواند مقادیری مانند"admin","editor","viewer"را بپذیرد. با استفاده از ساختارswitch، یک پیام خوشامدگویی متناسب با نقش کاربر چاپ کنید. - تعیین فصل سال: یک متغیر به نام
$monthتعریف کنید و نام یک ماه میلادی را در آن قرار دهید (مثلاً"October"). با استفاده از ساختارif...elseif...elseو عملگر منطقی||(OR)، کدی بنویسید که فصل مربوط به آن ماه را تشخیص داده و چاپ کند.
باشگاه ذهن: یک چالش برای هوش مصنوعی
چالش شما: از نسخه ۸ به بعد، PHP یک ساختار کنترلی جدید و بسیار قدرتمند به نام match معرفی کرده است که جایگزین مدرنتری برای switch محسوب میشود. این ساختار خواناتر، امنتر و دارای قابلیتهای بیشتری است.
وظیفه: یک پرامپت برای هوش مصنوعی بنویسید و از او بخواهید:
- ساختار
matchدر PHP 8 را با یک مثال ساده معرفی کند. - سه تفاوت اصلی و کلیدی بین
switchوmatchرا لیست کرده و توضیح دهد (راهنمایی: به مقایسه سخت===، عدم نیاز بهbreakو قابلیت برگرداندن مقدار (return value) اشاره کنید). - مثال "پیام روز هفته" که با
switchنوشتیم را با استفاده از ساختارmatchبازنویسی کند تا برتریهای آن به وضوح دیده شود.