First, and mainly, SplEnum is not integrated to PHP, you have to install it separately.
Using an enum instead of class constants provides the following advantages:
- 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
finalto 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.
use MyCLabs\Enum\Enum;
/**
* Action enum
*/
class Action extends Enum
{
const VIEW = 'view';
const EDIT = 'edit';
}$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.
One advantage over using class constants is to be able to type-hint enum values:
function setAction(Action $action) {
// ...
}__construct()The constructor checks that the value exist in the enum__toString()You canecho $myValue, it will display the enum value (value of the constant)getValue()Returns the current value of the enumgetKey()Returns the key of the current value on Enumkeys()(@static) Returns the names (keys) of all constants in the Enum classvalues()(@static) method Returns all possible values as an array (constant name in key, constant value in value)toArray()(@static and @deprecated) Alias forvalues()isValid()(@static) Check if tested value is valid on enum setisValidKey()(@static) Check if tested key is valid on enum setsearch()Return key for searched value
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().
If you care about IDE autocompletion, you can either implement the static methods yourself:
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):
/**
* @method static Action VIEW()
* @method static Action EDIT()
*/
class Action extends Enum
{
const VIEW = 'view';
const EDIT = 'edit';
}

