anik/php-enum-enhancements provides a few methods to retrieve keys, values or kv pair on PHP Enums.
To install the package, run
composer require anik/php-enum-enhancements
Use the Anik\PhpEnumEnhancements\Enhancement
trait in any of your Enum, and you'll have access to the following method.
# [\UnitEnum | \BackedEnum ]::case->getName(/* null or callable */)
# \BackedEnum::case->getValue(/* null or callable */)
# [\UnitEnum | \BackedEnum ]::names(/* null or callable */)
# \BackedEnum::values(/* null or callable */)
# \BackedEnum::kvPair(
/* nameCallback: null or callable, */
/* valueCallback: null or callable, */
/* valueAsKey: bool */
# )
For the enum below,
enum PostStatus: string {
use \Anik\PhpEnumEnhancements\Enhancement;
case DRAFT = 'draft';
case UNDER_REVIEW = 'under_review';
case PUBLISHED = 'published';
}
-
PostStatus::DRAFT->getName()
will return"DRAFT"
. -
PostStatus::DRAFT->getName('strtolower')
will return"draft"
. -
PostStatus::DRAFT->getValue()
will return"draft"
. -
PostStatus::DRAFT->getValue('ucfirst')
will return"Draft"
. -
PostStatus::names()
will return[ "DRAFT", "UNDER_REVIEW", "PUBLISHED", ]
. -
PostStatus::names('strtolower')
will return[ "draft", "under_review", "published", ]
. -
PostStatus::values()
will return[ "draft", "under_review", "published", ]
. -
PostStatus::values('ucfirst')
will return[ "Draft", "Under_review", "Published", ]
. -
PostStatus::kvPair()
will return[ "draft" => "DRAFT", "under_review" => "UNDER_REVIEW", "published" => "PUBLISHED", ]
. -
PostStatus::kvPair(nameCallback: 'strtolower')
will return[ "draft" => "draft", "under_review" => "under_review", "published" => "published", ]
. -
PostStatus::kvPair(valueCallback: 'ucfirst')
will return[ "Draft" => "DRAFT", "Under_review" => "UNDER_REVIEW", "Published" => "PUBLISHED", ]
. -
PostStatus::kvPair(valueAsKey: false)
will return[ "DRAFT" => "draft", "UNDER_REVIEW" => "under_review", "PUBLISHED" => "published", ]
in ['NAME_OF_ENUM' => 'VALUE_OF_ENUM'] format.
If you find any issue/bug/missing feature, please submit an issue and PRs if possible.