
چرا باید از Enums در PHP استفاده کنیم؟
آیا هنوز در PHP از ثابتهای کلاسی (class constants) استفاده میکنید، با وجود اینکه Enums دو سال پیش معرفی شدهاند؟ اکنون وقت آن است که با ۴ دلیل قانعکننده برای مهاجرت به Enums در PHP و مدرنسازی کدهای خود آشنا شوید.
۱) متد داخلی cases
تصور کنید در پروژهای وضعیتهای مختلفی برای کاربران تعریف کردهاید: فعال، ممنوع (banned) و ثبتنام ناقص. در روش سنتی با استفاده از ثابتهای کلاسی، ممکن است کد شما شبیه این باشد:

اما با Enums، کد شما سادهتر خواهد بود:

متد داخلی cases به طور خودکار آرایهای از تمام گزینهها را بازمیگرداند، بدون نیاز به بهروزرسانی دستی:

۲) تایپدهی (Type Hinting)
با استفاده از تایپدهی در متدها میتوانید مطمئن شوید که تنها مقادیر معتبر به کد شما وارد میشوند. در روش سنتی:

اما با استفاده از Enums، کد شما امنتر میشود:

۳) متدهای Enum
همچنان از مثالی با وضعیت کاربران استفاده میکنم. فرض کنید که برخی از آنها اجازه ورود به سیستم دارند و برخی دیگر ندارند.
منطق به شیوه قدیمی
استفاده از Enum
بله، قبول دارم که این یک "تغییر انقلابی" نیست، اما کد شما را تمیزتر و کوتاهتر میکند.
۴) یکتایی
این ویژگی تا حدودی با نکته دوم این بحث همپوشانی دارد، اما میخواهم به صورت جداگانه به آن بپردازم.
فرض کنید وضعیتهایی داریم، نه فقط برای کاربران، بلکه برای کالاهای فروشگاه آنلاینمان:

استفاده نادرست از وضعیتها
هیچ خطایی دریافت نخواهیم کرد! شاید به نظر نرسد که این یک مشکل بزرگ باشد، اما اگر در آینده مقدار ProductStatus::ACTIVE
را تغییر دهیم، قطعاً با خطا مواجه خواهیم شد.
Enumها یکتا هستند

حتی اگر UserStatus::ACTIVE
و ProductStatus::ACTIVE
مقدار یکسانی داشته باشند، آنها موارد متفاوتی هستند. ما میتوانیم به راحتی این موضوع را به صورت دستی بررسی کنیم.

این بدان معناست که Type-Hinting دوبار به ما کمک میکند — هم جلوی استفاده از مقادیر نادرست را میگیرد و هم جلوی استفاده از منابع نادرست این مقادیر را، حتی اگر شبیه به هم باشند.