switch хуваарилагч
Нэг хувьсагчийн олон боломжит утгыг шалгах шаардлага байнга гардаг. if / elseif / else-ийг дараалан нь бичиж болно, гэхдээ тохиолдол олон болохоор код нь уншиход хэцүү болдог. Яг энэ тохиолдолд switch хуваарилагч тохиромжтой — кодыг цэвэр, тодорхой болгодог.
switch үндсэн бүтэц
<?php
$гараг = "Мягмар";
switch ($гараг) {
case "Даваа":
echo "7 хоногийн эхний өдөр.";
break;
case "Мягмар":
echo "7 хоногийн хоёрдугаар өдөр.";
break;
case "Лхагва":
echo "Долоо хоногийн дунд.";
break;
case "Пүрэв":
echo "Баасан ойрхон болж байна!";
break;
case "Баасан":
echo "Амрах өдөр ойрхон!";
break;
default:
echo "Амралтын өдөр — сайхан амар!";
}
// 7 хоногийн хоёрдугаар өдөр.
?>
switch нь утгуудыг == (loose comparison) -ээр харьцуулдаг. Тохирсон case олдвол тэр блок гүйцэтгэгдэж, break-д хүртэл үргэлжилдэг.
break яагаад чухал вэ?
break -ийг орхивол PHP дараагийн case-ийг мөн гүйцэтгэнэ — энийг fall-through гэж нэрлэдэг:
<?php
$оноо = 2;
switch ($оноо) {
case 1:
echo "Нэгдүгээр байр — Алт!";
break;
case 2:
echo "Хоёрдугаар байр — Мөнгө!";
// break байхгүй — дараагийн case рүү унана!
case 3:
echo "Гуравдугаар байр — Хүрэл!";
break;
default:
echo "Оролцогч.";
}
// Хоёрдугаар байр — Мөнгө!
// Гуравдугаар байр — Хүрэл! ← гэнэтийн!
?>
Энэ зан чанарыг санаатайгаар ашиглаж болно — олон case нэг кодоор боловсруулах үед:
<?php
$сар = 4; // Дөрөвдүгээр сар
switch ($сар) {
case 12:
case 1:
case 2:
echo "Өвөл";
break;
case 3:
case 4:
case 5:
echo "Хавар";
break;
case 6:
case 7:
case 8:
echo "Зун";
break;
default:
echo "Намар";
}
// Хавар
?>
return ашиглах функц дотор
Функц дотор switch ашиглахдаа break-ийн оронд return хэрэглэж болно — код богиносно:
<?php
function гарагийн_нэр(int $дугаар): string {
switch ($дугаар) {
case 1: return "Даваа";
case 2: return "Мягмар";
case 3: return "Лхагва";
case 4: return "Пүрэв";
case 5: return "Баасан";
case 6: return "Бямба";
case 7: return "Ням";
default: return "Тодорхойгүй";
}
}
echo гарагийн_нэр(3); // Лхагва
echo гарагийн_нэр(9); // Тодорхойгүй
// Өнөөдрийн гаараг
$өнөөдөр = (int) date("N"); // 1=Да, 7=Ня
echo гарагийн_нэр($өнөөдөр);
?>
switch vs match — харьцуулалт
PHP 8-д нэмэгдсэн match нь switch-ийн орчин үеийн хувилбар. Ялгааг нь мэдэх нь чухал:
<?php
$статус = "идэвхтэй";
// switch — loose comparison (==), утга буцаадаггүй
switch ($статус) {
case "идэвхтэй":
$өнгө = "ногоон";
break;
case "хаалттай":
$өнгө = "улаан";
break;
default:
$өнгө = "саарал";
}
echo $өнгө; // ногоон
// match — strict comparison (===), утга буцаадаг, богино
$өнгө = match($статус) {
"идэвхтэй" => "ногоон",
"хаалттай" => "улаан",
"хүлээгдэж байгаа" => "шар",
default => "саарал",
};
echo $өнгө; // ногоон
?>
match нь:
- Strict comparison (
===) ашиглана —"1"ба1ялгана - Утга шууд буцаана —
$хувьсагч = match(...) { ... }; breakхэрэггүй- Тохирох
caseолдохгүй болUnhandledMatchErrorалдаа шиддэг
Практик жишээ — HTTP статус код
<?php
function статус_тайлбар(int $код): string {
switch ($код) {
case 200:
return "OK — Хүсэлт амжилттай.";
case 201:
return "Created — Амжилттай үүсгэсэн.";
case 400:
return "Bad Request — Хүсэлт буруу.";
case 401:
return "Unauthorized — Нэвтрэх шаардлагатай.";
case 403:
return "Forbidden — Хандах эрхгүй.";
case 404:
return "Not Found — Олдсонгүй.";
case 500:
return "Internal Server Error — Серверийн алдаа.";
default:
return "Тодорхойгүй статус код: $код";
}
}
echo статус_тайлбар(200); // OK — Хүсэлт амжилттай.
echo статус_тайлбар(404); // Not Found — Олдсонгүй.
echo статус_тайлбар(418); // Тодорхойгүй статус код: 418
?>
Дараагийн хичээлд:
Давталтуудыг — for, while, do-while, foreach — судална. Тэдгээр нь хэрхэн ажилладаг, ямар нөхцөлд аль давталтыг сонгох, break ба continue хэрхэн хэрэглэгддэгийг үзнэ.