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 Mycsense\Enum\Enum;
/**
* Action enum
*/
class Action extends Enum
{
const VIEW = 'view';
const EDIT = 'edit';
/**
* @return Action
*/
public static function VIEW() {
return new Action(self::VIEW);
}
/**
* @return Action
*/
public static function EDIT() {
return new Action(self::EDIT);
}
}Implementing the static methods VIEW() and EDIT() is optional, it only serves as shortcut to new Action(Action::VIEW).
$action = Action::VIEW();
// or
$action = new Action(Action::VIEW);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 enumtoArray()(static) Returns an array of all possible values (constant name in key, constant value in value)