سطح 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ها برابر نبود اجرا می‌شود
}

کارگاه عملی: سیستم نمره‌دهی و پیام روز هفته

در این مثال ترکیبی، ابتدا با 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>";

?>

تمرین شما

صورت تمرین:

  1. ربات راهنمای کاربر: یک متغیر به نام $user_role تعریف کنید که می‌تواند مقادیری مانند "admin", "editor", "viewer" را بپذیرد. با استفاده از ساختار switch، یک پیام خوشامدگویی متناسب با نقش کاربر چاپ کنید.
  2. تعیین فصل سال: یک متغیر به نام $month تعریف کنید و نام یک ماه میلادی را در آن قرار دهید (مثلاً "October"). با استفاده از ساختار if...elseif...else و عملگر منطقی || (OR)، کدی بنویسید که فصل مربوط به آن ماه را تشخیص داده و چاپ کند.

باشگاه ذهن: یک چالش برای هوش مصنوعی

چالش شما: از نسخه ۸ به بعد، PHP یک ساختار کنترلی جدید و بسیار قدرتمند به نام match معرفی کرده است که جایگزین مدرن‌تری برای switch محسوب می‌شود. این ساختار خواناتر، امن‌تر و دارای قابلیت‌های بیشتری است.

وظیفه: یک پرامپت برای هوش مصنوعی بنویسید و از او بخواهید:

  1. ساختار match در PHP 8 را با یک مثال ساده معرفی کند.
  2. سه تفاوت اصلی و کلیدی بین switch و match را لیست کرده و توضیح دهد (راهنمایی: به مقایسه سخت ===، عدم نیاز به break و قابلیت برگرداندن مقدار (return value) اشاره کنید).
  3. مثال "پیام روز هفته" که با switch نوشتیم را با استفاده از ساختار match بازنویسی کند تا برتری‌های آن به وضوح دیده شود.