سوئیچ/گزینش (PHP Switch)
انتخابگرِ 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 داشته باشید تا برایِ ورودیهایِ غیرمنتظره، برنامهیِ شما رفتارِ نامشخصی نداشته باشد.
بخش تخصصی: مهندسی منطق و پرفورمنس در PHP 🐘⚙️
در سطوحِ حرفهای، اجرایِ کد فقط کافی نیست؛ "چگونگیِ" اجرا و بهینهسازیِ آن تفاوتِ بینِ یک کدِ معمولی و یک معماریِ مقیاسپذیر را رقم میزند.
۱. بهینهسازیِ محاسبات با BCMath
در سیستمهایِ مالی و بانکی، دقتِ اعشاریِ معمولی (Float) به دلیلِ خطاهایِ گرد کردنِ باینری قابلِ اعتماد نیست. برایِ این کار، PHP افزونهای به نام BCMath دارد که محاسبات را با دقتِ نامحدود و به صورتِ رشتهای انجام میدهد تا حتی یک ریال هم در محاسبات جابجا نشود.
۲. ساختارِ HashTable در آرایهها
آرایهها در PHP برخلافِ بسیاری از زبانها، در واقع Ordered Hash Maps هستند. هر زمان که شما عضوی به آرایه اضافه میکنید، PHP یک سیستمِ Bucket و Hash را در پشتِ صحنه مدیریت میکند تا سرعتِ دسترسی به دادهها در حالتِ میانگین O(1) باقی بماند.
۳. مفهومِ Closures و کپسولهسازی
توابعِ بینام (Anonymous) در PHP فقط برایِ کارهایِ موقت نیستند. با استفاده از کلمه کلیدی use، میتوانید متغیرهایی را از اسکوپِ بیرونی به داخلِ تابع وارد کنید و یک Closure بسازید که پایه و اساسِ بسیاری از الگوهایِ طراحی مدرن است.
ifها، ابتدا حالتهایِ خطا را چک کرده و از تابع خارج شوید تا خواناییِ کد به حداکثر برسد.
تمرینهای عملی
برای تثبیت یادگیری این درس تمرینهای زیر را حل کنید
با استفاده از switch، برای متغیر $grade = "A"، اگر A بود عبارت Excellent را چاپ کنید.
<?php
$grade = "A";
switch ($grade) {
case "A":
echo "Excellent";
break;
}
?>
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.