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

چطور از Enum در PHP استفاده کنیم؟
چطور از Enum در PHP استفاده کنیم؟

به طور ساده میشه گفت که Enum مجموعه‌ای از مقادیر ثابت هست که از نسخه 8.1 به زبان برنامه‌نویسی PHP اضافه شده. Enum زمانی کاربرد داره که که مجموعه‌ای از مقادیر به هم مرتبط داریم که باید در یک گروه قرار بگیرند. در تکه کد زیر نمونه‌ای از یک enum مشاهده می‌کنیم:

استفاده از Enum برای تعیین مقادیر status
استفاده از Enum برای تعیین مقادیر status

همونطور که دیدیم میتونیم داخل enum متد تعریف کنیم و نکته جالبش این هست که enumمی‌تونه از interfaceها implement کنه.

ترکیب enum و interface
ترکیب enum و interface

مقادیر Enum

در صورت نیاز میتونید برای enum مقدار تعیین کنید که به این نوع Backed Enum گفته میشه و لازم هست که براشون type تعریف بشه و همه مقادیر بایستی مقداری از همون type داشته باشند.

نحوه تعریف یک backed enum
نحوه تعریف یک backed enum

مقداری که در Backed Enums تعریف کردیم رو میتونیم به روش پایین بگیریم:

$value = Status::PUBLISHED->value; // 2

نام کلید enum رو هم به روش پایین می‌تونیم بگیریم:

$name= Status::PUBLISHED->name; // published

می‌تونیم باتوجه به مقدار یک enum کلید اون رو بگیریم:

$status = Status::from(2); // Status::PUBLISHED

اگر مقداری که وارد میکنیم در enum وجود نداشته باشه متد from خطا برمی‌گردونه، همینطور می‌تونیم از متد tryFrom برای دریافت کلید یک enum از مقدارش استفاده کنیم که در صورت نبود اون مقدار فقط null برمی‌گردونه.

$status = Status::tryFrom(100); // null

به کمک متد cases می‌تونیم تمامی مقادیر موجود در یک enum رو بگیریم.

Status::cases();
/* [
    Status::DRAFT, 
    Status::PUBLISHED, 
    Status::ARCHIVED
] */

چند نکته:

نکته 1: دقت کنید که هر مقدار enum یک object هست در نتیجه نمی‌تونیم از اونها به عنوان کلیدهای یک آرایه استفاده کنیم.

نکته 2: می‌تونیم از trait در داخل enum استفاده کنیم و فقط باید دقت کنیم که متدهای پیشفرض enum مثل from یا tryFrom رو حق نداریم override کنیم و trait ما نباید property داشته باشه.

نکته 3: enum های معمولی به طور پیشفرض از interface با نام UnitEnum استفاده می‌کنند که طبق مستندات PHP متد cases در اون قرار داره.

تعریف interface با نام UnitEnum
تعریف interface با نام UnitEnum

نکته 4: backed enum ها از interface با نام BackedEnum استفاده می‌کنند که در اون متدهای from و tryFrom تعریف شده و این interface از unitEnum ارث‌بری می‌کنه.

تعریف interfaceبا نام BackedEnum
تعریف interfaceبا نام BackedEnum

باتوجه به مطالبی که تا الان بررسی کردیم تکه کد پایین می‌تونه ایده کلی در استفاده از enum بهمون بده.

تعریف enum به همراه متدهای پرکاربرد
تعریف enum به همراه متدهای پرکاربرد
اگه میخواید از این تکه کد تو پروژه استفاده کنید به این github gist سر بزنید. https://gist.github.com/mhmmdtech/bed2dc8f0d93db33b94d6337241de6bd

تو این مطلب ویژگی enum رو بررسی کردیم و متوجه شدیم که به شدت خوانایی کد رو افزایش میده و احتمال خطا رو کاهش میده. اگر نظر یا سوالی راجع به این مطلب دارید حتما بگید و لطفا این مطلب رو به افرادی که در حال یادگیری PHP هستند معرفی کنید و در آخر ممنونم ازتون بابت وقتی که گذاشتید و این مطلب رو خوندید.