PHP Enum implementation inspired from SplEnum
, (*1)
Why?
First, and mainly, SplEnum
is not integrated to PHP, you have to install it separately., (*2)
Using an enum instead of class constants provides the following advantages:, (*3)
- You can type-hint:
function setAction(Action $action) {
- You can enrich the enum with methods (e.g.
format
, parse
, …)
- You can extend the enum to add new values (make your enum
final
to prevent it)
- You can get a list of all the possible values (see below)
This Enum class is not intended to replace class constants, but only to be used when it makes sense., (*4)
Installation
composer require myclabs/php-enum
Declaration
use MyCLabs\Enum\Enum;
/**
* Action enum
*/
class Action extends Enum
{
const VIEW = 'view';
const EDIT = 'edit';
}
Usage
$action = new Action(Action::VIEW);
// or
$action = Action::VIEW();
As you can see, static methods are automatically implemented to provide quick access to an enum value., (*5)
One advantage over using class constants is to be able to type-hint enum values:, (*6)
function setAction(Action $action) {
// ...
}
Documentation
-
__construct()
The constructor checks that the value exist in the enum
-
__toString()
You can echo $myValue
, it will display the enum value (value of the constant)
-
getValue()
Returns the current value of the enum
-
getKey()
Returns the key of the current value on Enum
-
equals()
Tests whether enum instances are equal (returns true
if enum values are equal, false
otherwise)
Static methods:, (*7)
-
toArray()
method Returns all possible values as an array (constant name in key, constant value in value)
-
keys()
Returns the names (keys) of all constants in the Enum class
-
values()
Returns instances of the Enum class of all Enum constants (constant name in key, Enum instance in value)
-
isValid()
Check if tested value is valid on enum set
-
isValidKey()
Check if tested key is valid on enum set
-
search()
Return key for searched value
Static methods
class Action extends Enum
{
const VIEW = 'view';
const EDIT = 'edit';
}
// Static method:
$action = Action::VIEW();
$action = Action::EDIT();
Static method helpers are implemented using __callStatic()
., (*8)
If you care about IDE autocompletion, you can either implement the static methods yourself:, (*9)
class Action extends Enum
{
const VIEW = 'view';
/**
* @return Action
*/
public static function VIEW() {
return new Action(self::VIEW);
}
}
or you can use phpdoc (this is supported in PhpStorm for example):, (*10)
/**
* @method static Action VIEW()
* @method static Action EDIT()
*/
class Action extends Enum
{
const VIEW = 'view';
const EDIT = 'edit';
}