دوره‌ها / آموزش جامع PHP (از صفر تا استادی) / سوئیچ/گزینش (PHP Switch)

سوئیچ/گزینش (PHP Switch)

30 دقیقه Article

انتخاب‌گرِ Switch: منظم‌تر از Ifهایِ تودرتو 🔀🔘

وقتی یک متغیر واحد دارید که می‌خواهید آن را با ده‌ها مقدارِ مختلف مقایسه کنید، استفاده از if...elseif باعثِ شلوغیِ کد می‌شود. در این موارد، switch قهرمانِ شماست.

ساختارِ Switch:

{code_block('switch ($color) {\n case "red":\n echo "قرمز";\n break;\n case "blue":\n echo "آبی";\n break;\n default:\n echo "رنگ ناشناخته";\n}')}

نقشِ حیاتیِ break:

اگر کلمه‌یِ break را فراموش کنید، PHP حتی بعد از پیدا کردنِ جواب، کدهایِ case بعدی را هم اجرا می‌کند! به این اتفاق Fall-through می‌گویند که گاهی اوقات عمدی است اما معمولاً یک باگ است.

Match Expression (PHP 8.0+) 💎

جایگزینِ مدرن و بسیار قدرتمندِ switch. match سریع‌تر است، سینتکسِ کوتاه‌تری دارد و برخلافِ switch، یک "مقدار" برمی‌گرداند.

{code_block('$result = match ($status) {\n 200 => "OK",\n 404 => "Not Found",\n default => "Unknown",\n};')}
تفاوتِ مهم: دستورِ match از حالتِ Strict Comparison (===) استفاده می‌کند، در حالی که switch از مقایسه‌یِ معمولی (==) استفاده می‌کند.
Default: همیشه یک بخشِ default داشته باشید تا برایِ ورودی‌هایِ غیرمنتظره، برنامه‌یِ شما رفتارِ نامشخصی نداشته باشد.
<hr style="margin: 50px 0; border: 0; border-top: 1px dashed rgba(255,255,255,0.1);">

بخش تخصصی: مهندسی منطق و پرفورمنس در PHP 🐘⚙️

در سطوحِ حرفه‌ای، اجرایِ کد فقط کافی نیست؛ "چگونگیِ" اجرا و بهینه‌سازیِ آن تفاوتِ بینِ یک کدِ معمولی و یک معماریِ مقیاس‌پذیر را رقم می‌زند.

۱. بهینه‌سازیِ محاسبات با BCMath

در سیستم‌هایِ مالی و بانکی، دقتِ اعشاریِ معمولی (Float) به دلیلِ خطاهایِ گرد کردنِ باینری قابلِ اعتماد نیست. برایِ این کار، PHP افزونه‌ای به نام BCMath دارد که محاسبات را با دقتِ نامحدود و به صورتِ رشته‌ای انجام می‌دهد تا حتی یک ریال هم در محاسبات جابجا نشود.

۲. ساختارِ HashTable در آرایه‌ها

آرایه‌ها در PHP برخلافِ بسیاری از زبان‌ها، در واقع Ordered Hash Maps هستند. هر زمان که شما عضوی به آرایه اضافه می‌کنید، PHP یک سیستمِ Bucket و Hash را در پشتِ صحنه مدیریت می‌کند تا سرعتِ دسترسی به داده‌ها در حالتِ میانگین O(1) باقی بماند.

۳. مفهومِ Closures و کپسوله‌سازی

توابعِ بی‌نام (Anonymous) در PHP فقط برایِ کارهایِ موقت نیستند. با استفاده از کلمه کلیدی use، می‌توانید متغیرهایی را از اسکوپِ بیرونی به داخلِ تابع وارد کنید و یک Closure بسازید که پایه و اساسِ بسیاری از الگوهایِ طراحی مدرن است.

نکته طلایی: همیشه برایِ شرط‌هایِ پیچیده از Early Return استفاده کنید. به جایِ تودرتو کردنِ ifها، ابتدا حالت‌هایِ خطا را چک کرده و از تابع خارج شوید تا خواناییِ کد به حداکثر برسد.

تمرین‌های عملی

برای تثبیت یادگیری این درس تمرین‌های زیر را حل کنید

دسته‌بندی نمرات Medium
سوال تمرین

با استفاده از switch، برای متغیر $grade = "A"، اگر A بود عبارت Excellent را چاپ کنید.

پاسخ تمرین
PHP
<?php
$grade = "A";
switch ($grade) {
  case "A":
    echo "Excellent";
    break;
}
?>

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.