PHP 8.1 Enums Extended, gives you the ability to use additional methods to work with PHP 8.1 Enums.
enum StatusEnum:int
{
case Closed = 0;
case Open = 1;
case PENDING_APPROVAL = 2;
}
// Given a new Blog() that uses the enum trait, you can do things like:
$blog->status->isOpen() // Will return boolean
$blog->status->equals(StatusEnum::Open, StatusEnum::Closed)
// Normalization happens in the background allowing these scenarios
$blog->status->isPendingApproval();
$blog->status->isPENDING_APPROVAL();
StatusEnum::Open() // Will return ->value, vs doing StatusEnum::Open->value
StatusEnum::PendingApproval()
StatusEnum::PENDING_APPROVAL()
You can install the package via composer:
composer require josezenem/php-enums-extended
Pass one or multiple Enum cases, will return boolean if one matches.
$blog->status->equals(StatusEnum::Closed, StatusEnum::Draft);
Pass one or multiple Enum cases, will return boolean if it does not match.
$blog->status->doesNotEqual(StatusEnum::Closed, StatusEnum::Draft);
Returns boolean if the current value matches the desired case. Methods with underscores can be accessed via camel case, as well as their regular name.
$blog->status->isDraft();
// Given StatusEnum::OPEN_ISSUE = 4;
// the following is acceptable.
$blog->status->isOpenIssue();
$blog->status->isOPEN_ISSUE();
Will return an array of $val => $key.
$options = self::options()
// returns
$options = [
'open' => 'Open',
'closed' => 'Closed',
'draft' => 'Draft',
]
Will return an array of $key => $val.
$options = self::optionsFlipped()
// returns
$options = [
'Open' => 'open',
'Closed' => 'closed',
'Draft' => 'draft',
]
Will return an array of only names
$options = self::names()
// returns
$options = [
'Open' => 'Open',
'Closed' => 'Closed',
'Draft' => 'Draft',
]
Pass variable and confirm if the name is valid for the Enum
App\MyEnums\Type::hasName('Closed');
// Returns true
App\MyEnums\Type::hasName('close');
// Returns false
Will return an array of only values
$options = self::values()
// returns
$options = [
'open' => 'open',
'closed' => 'closed',
'draft' => 'draft',
]
Pass variable and confirm if the value is valid for the Enum
App\MyEnums\Type::hasValue('closed');
// Returns true
App\MyEnums\Type::hasValue('not a valid value for the enum');
// Returns false
Will allow you to grab the value of a field by calling it statically.
// Consider the following scenario, to get the value you would do:
// StatusEnum::Open->value
enum StatusEnum:int
{
case Closed = 0;
case Open = 1;
case Draft = 2;
}
// You can instead get value directy by calling it statically
// Case Insensitive
StatusEnum::OPEN()
StatusEnum::Open()
When using the magic methods, if the method calls do not exist, the system will throw
Josezenem\PhpEnumsExtended\Exceptions\EnumsExtendedException
// StatusEnum.php
// StatusEnum:int is used for the example, but supports :string and default of just StatusEnum
use Josezenem\PhpEnumsExtended\Traits\PhpEnumsExtendedTrait;
enum StatusEnum:int
{
use PhpEnumsExtendedTrait;
case Closed = 0;
case Open = 1;
case Draft = 2;
}
// Blog.php
class Blog
{
public function __construct(
public StatusEnum $status = StatusEnum::Open,
) {
}
}
// Usage
$blog = new Blog();
// ->equals()
$blog->status->equals(StatusEnum::Open); // will return true if it matches
$blog->status->equals(StatusEnum::Closed, StatusEnum::Open); // Pass any number of params, will return true if it matches any of the parameters
// ->doesNotEqual()
$blog->status->doesNotEqual(StatusEnum::Closed); // will return true if it does not match
$blog->status->doesNotEqual(StatusEnum::Closed, StatusEnum::Draft) // Pass any number of params, will return true if it does not match any of the parameters
// ->is** magic method
// the magic method takes camelCase allowing you to do boolean check against any field.
$blog->status->isOpen() // will return true or false
// ::options()
$options = StatusEnum::options();
// will output
//$options = [
// 0 => 'Closed',
// 1 => 'Open',
// 2 => 'Closed',
//];
// ::optionsFlipped()
$options = StatusEnum::optionsFlipped();
// will output
//$options = [
// 'Closed' => 0,
// 'Open' => 1,
// 'Closed' => 2,
//];
composer test
Please see CHANGELOG for more information on what has changed recently.
Please see CONTRIBUTING for details.
Please review our security policy on how to report security vulnerabilities.
- Jose Jimenez
- All Contributors
- Special Thanks to Shocm for pushing me to make this, and answering my late replies.
The MIT License (MIT). Please see License File for more information.