دستور switch و match

جایگزین‌های if...elseif با switch و آشنایی با match expression جدید PHP 8

دستور switch

وقتی چند شرط دارید که همگی مقدار یک متغیر را بررسی می‌کنند، switch خواناتر از if...elseif است:

<?php
$day = "دوشنبه";

switch ($day) {
    case "شنبه":
        echo "اولین روز کاری";
        break;
    case "دوشنبه":
        echo "دومین روز کاری";
        break;
    case "جمعه":
        echo "روز تعطیل";
        break;
    default:
        echo "روز معمولی";
}
?>

ساختار switch

switch (متغیر) {
    case مقدار۱:
        // کد
        break;
    case مقدار۲:
        // کد
        break;
    default:
        // کد پیش‌فرض
}
فراموش نکنید break; بگذارید! در غیر این صورت، تمام case‌های بعدی هم اجرا می‌شوند.

گروه‌بندی case‌ها

چند case می‌توانند کد مشترک داشته باشند:

<?php
$day = "شنبه";

switch ($day) {
    case "شنبه":
    case "یکشنبه":
    case "دوشنبه":
    case "سه‌شنبه":
    case "چهارشنبه":
        echo "روز کاری";
        break;
    case "پنجشنبه":
        echo "نیمه کاری";
        break;
    case "جمعه":
        echo "تعطیل";
        break;
}
?>

switch با نوع متفاوت

<?php
$x = 1;

switch ($x) {
    case 1:
        echo "عدد یک";
        break;
    case "1":
        echo "رشته یک";  // این هم اجرا می‌شود!
        break;
}
?>
switch با == مقایسه می‌کند (بدون بررسی نوع). مراقب باشید!

دستور match (PHP 8+) — مدرن‌تر

PHP 8 دستور جدیدی به نام match معرفی کرد که جایگزین مدرن switch است:

<?php
$day = "دوشنبه";

$result = match ($day) {
    "شنبه", "یکشنبه" => "ابتدای هفته",
    "جمعه" => "تعطیل",
    default => "روز معمولی",
};

echo $result;
?>

مزایای match نسبت به switch

ویژگیswitchmatch
مقایسهضعیف (==)سخت‌گیرانه (===)
مقدار برگشتیندارد✅ دارد
نیاز به break✅ بله❌ خیر
گروه‌بندیبا fall-throughبا کاما
default الزامی؟خیراگر هیچ مورد مطابقت نداشته باشد، خطا می‌دهد
در پروژه‌های جدید PHP 8+، از match استفاده کنید. امن‌تر و خواناتر است.

match بدون شرط

می‌توانید از match برای بررسی شرط‌های مختلف استفاده کنید:

<?php
$age = 25;

$category = match (true) {
    $age < 13 => "کودک",
    $age < 20 => "نوجوان",
    $age < 60 => "بزرگسال",
    default => "سالمند",
};

echo $category;  // بزرگسال
?>

این مبحث بخشی از دوره آموزش کامل PHP است.

ابزارهای مرتبط