توسعه دهنده سمت سرور (پیاچپی و لاراول)
چطور از Enums در PHP استفاده کنیم؟
![چطور از Enum در PHP استفاده کنیم؟](https://files.virgool.io/upload/users/1680120/posts/nrm0rputoxxw/cxk7p8s06fcd.png)
به طور ساده میشه گفت که Enum مجموعهای از مقادیر ثابت هست که از نسخه 8.1 به زبان برنامهنویسی PHP اضافه شده. Enum زمانی کاربرد داره که که مجموعهای از مقادیر به هم مرتبط داریم که باید در یک گروه قرار بگیرند. در تکه کد زیر نمونهای از یک enum
مشاهده میکنیم:
![استفاده از Enum برای تعیین مقادیر status](https://files.virgool.io/upload/users/1680120/posts/nrm0rputoxxw/wkdjtgk3wuol.png)
همونطور که دیدیم میتونیم داخل enum
متد تعریف کنیم و نکته جالبش این هست که enum
میتونه از interface
ها implement
کنه.
![ترکیب enum و interface](https://files.virgool.io/upload/users/1680120/posts/nrm0rputoxxw/auxees95fhm9.png)
مقادیر Enum
در صورت نیاز میتونید برای enum
مقدار تعیین کنید که به این نوع Backed Enum گفته میشه و لازم هست که براشون type
تعریف بشه و همه مقادیر بایستی مقداری از همون type
داشته باشند.
![نحوه تعریف یک backed enum](https://files.virgool.io/upload/users/1680120/posts/nrm0rputoxxw/ukwbuop6bjm4.png)
مقداری که در 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](https://files.virgool.io/upload/users/1680120/posts/nrm0rputoxxw/4cghzlenr2x3.png)
نکته 4: backed enum ها از interface
با نام BackedEnum
استفاده میکنند که در اون متدهای from
و tryFrom
تعریف شده و این interface
از unitEnum
ارثبری میکنه.
![تعریف interfaceبا نام BackedEnum](https://files.virgool.io/upload/users/1680120/posts/nrm0rputoxxw/kisjmyfkzprb.png)
باتوجه به مطالبی که تا الان بررسی کردیم تکه کد پایین میتونه ایده کلی در استفاده از enum
بهمون بده.
![تعریف enum به همراه متدهای پرکاربرد](https://files.virgool.io/upload/users/1680120/posts/nrm0rputoxxw/jpj2qh4aojsh.png)
اگه میخواید از این تکه کد تو پروژه استفاده کنید به این github gist سر بزنید. https://gist.github.com/mhmmdtech/bed2dc8f0d93db33b94d6337241de6bd
تو این مطلب ویژگی enum
رو بررسی کردیم و متوجه شدیم که به شدت خوانایی کد رو افزایش میده و احتمال خطا رو کاهش میده. اگر نظر یا سوالی راجع به این مطلب دارید حتما بگید و لطفا این مطلب رو به افرادی که در حال یادگیری PHP هستند معرفی کنید و در آخر ممنونم ازتون بابت وقتی که گذاشتید و این مطلب رو خوندید.
مطلبی دیگر از این انتشارات
مقدمه ای بر JUnit
مطلبی دیگر از این انتشارات
تست نفوذ با پایتون — چگونه باید با پایتون تست نفوذ گرفت؟
مطلبی دیگر از این انتشارات
اموزش برنامه نویسی java script