ساپورت PHP از تایپ enum در ورژن 8.1

سلام، امیدوارم که همگی در سلامت کامل باشید.


موضوعی که امروز می‌خوام با شما به اشتراک بزارم برای خودم خیلی هیجان انگیز هستش (احتمالا چون

همه اش چند دقیقه هست که باهاش آشنا شدم :دی );


معمولا تا الان برای تعریف کردن enum در PHP دست به دامن کلاس ها و کانستنت ها (constant) می‌شویم، اما پی اچ پی قرار هستش که از این تایپ به صورت مستقل تری در ورژن 8.1 پشتیبانی کنه.


خودم زمانی که می‌خوام توی پی اچ پی enum تعریف کنم معمولا از این روش استفاده میکنم :



حالا ببینید که خود پی اچ پی قراره که چطور این کار رو انجام بده‌ :



ما به راحتی میتونیم از این نوع دیتا به صورت type hint در کلاس ها استفاده کنیم، مثال :



:) خیلی تمیز، یه سری کار های دیگه هم درون این ساختار میشه انجام داد،

برای مثال تعریف کردن متد (method) در داخلش و استفاده از آن توسط کیس های enum ، به شکل زیر‌ :



بعلاوه :

* میتونیم متد ها رو به صورت استاتیک هم تعریف کنیم،

* تایپ enum همچنین میتونه از اینترفیس ها (interface) بهره ببره،

* میتونیم نوع خروجی رو برای این تایپ اضافه کنیم، در حال حاظر فقط میتونیم از string و int استفاده کنیم.


این مثال میتونه به درک بهتر موارد بالا کمک کنه:



ما میتونیم مستقیما به کیس های enum مقدار بدیم و به راحتی به مقدار آن ها دسترسی داشته باشیم،

به صورت زیر:



پراپرتی value در واقع رزرو شده هستش و امکان دسترسی به مقادیر کیس ها رو به ما میده


به این نوع از enum ها که مستقیما مقدار میگیرن backed enum گفته میشه،

- نکته ای که باید بهش دقت کنیم: کیس های enum از لحاظ مقدار گیری باید

در شرایط مشابه هم قرار داشته باشند، ما نمیتونیم به بعضی از کیس ها مقدار بدیم و به بعضیا ندیم.


علاوه بر دسترسی به مقدار enum ها، ما میتونیم از طریق مقدار ها هم به enum ها دسترسی داشته باشیم،

مثال:



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


و مورد آخر اینه که به کمک متد ()cases میتونیم به یک array که شامل کیس های enum هستش دسترسی داشته باشیم، مثال:



* نکته ی مهمی که نیاز به دونستنش هست اینه که در حال حاظر نمیتونیم از enum ها

به عنوان ایندکس در array ها استفاده کنیم، به دلیل اینکه اون ها از جنس آبجکت (object) هستن،

فقط میشه به عنوان weakMap key ها مورد استفاده قرار بگیره و همچنین در SPL method هایی

مثل ()splObjectStorage .


امیدوارم این پست براتون مفید و به دانش شما اضافه کرده باشه.

شاد و سلامت باشید.