چرا باید از Enums در PHP استفاده کنیم؟

چرا باید از Enums در PHP استفاده کنیم؟

آیا هنوز در PHP از ثابت‌های کلاسی (class constants) استفاده می‌کنید، با وجود اینکه Enums دو سال پیش معرفی شده‌اند؟ اکنون وقت آن است که با ۴ دلیل قانع‌کننده برای مهاجرت به Enums در PHP و مدرن‌سازی کدهای خود آشنا شوید.

۱) متد داخلی cases

تصور کنید در پروژه‌ای وضعیت‌های مختلفی برای کاربران تعریف کرده‌اید: فعال، ممنوع (banned) و ثبت‌نام ناقص. در روش سنتی با استفاده از ثابت‌های کلاسی، ممکن است کد شما شبیه این باشد:

 

example 11

 

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

 

example 12

 

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

 

example 13

۲) تایپ‌دهی (Type Hinting)

با استفاده از تایپ‌دهی در متدها می‌توانید مطمئن شوید که تنها مقادیر معتبر به کد شما وارد می‌شوند. در روش سنتی:

 

example 21

 

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

 

example 22

۳) متدهای Enum

همچنان از مثالی با وضعیت کاربران استفاده می‌کنم. فرض کنید که برخی از آن‌ها اجازه ورود به سیستم دارند و برخی دیگر ندارند.

 

منطق به شیوه قدیمی

 

example 31        

 

استفاده از Enum

 

example 32             

 

بله، قبول دارم که این یک "تغییر انقلابی" نیست، اما کد شما را تمیزتر و کوتاه‌تر می‌کند.

۴) یکتایی

این ویژگی تا حدودی با نکته دوم این بحث هم‌پوشانی دارد، اما می‌خواهم به صورت جداگانه به آن بپردازم.

فرض کنید وضعیت‌هایی داریم، نه فقط برای کاربران، بلکه برای کالاهای فروشگاه آنلاین‌مان:

 

example 41

 

استفاده نادرست از وضعیت‌ها

 

example 42       

 

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

 

Enum‌ها یکتا هستند

 

example 43

 

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

 

example 44

 

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