دستور 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
| ویژگی | switch | match |
|---|---|---|
| مقایسه | ضعیف (==) | سختگیرانه (===) |
| مقدار برگشتی | ندارد | ✅ دارد |
| نیاز به 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 است.