Abstract class to simulate enum with label in PHP
composer require brunojunior/simple-enum
You have to create a class which extends SimpleEnum\Enum
.
This enum will automatically generate labels thanks to the constants name. Here, you'll have those labels «First value», «Second value» and «Third value».
<?php
class SimpleEnum extends \SimpleEnum\Enum
{
const FIRST_VALUE = 0;
const SECOND_VALUE = 1;
const THIRD_VALUE = 2;
}
In this enum, the user want to change default labels.
<?php
class LabeledEnum extends \SimpleEnum\Enum
{
const FIRST_VALUE = 0;
const SECOND_VALUE = 1;
const THIRD_VALUE = 2;
/**
* Specify the labels
*/
protected static function defineList(): void
{
static::addEnum(static::FIRST_VALUE, 'My first value');
static::addEnum(static::SECOND_VALUE, 'This is the second value');
static::addEnum(static::THIRD_VALUE, 'Hey! 3rd value!');
}
}
In this enum, the user want to change default label and add some extra features.
<?php
class ComplexEnum extends \SimpleEnum\Enum
{
const FIRST_VALUE = 0;
const SECOND_VALUE = 1;
const THIRD_VALUE = 2;
/**
* A property
*/
private $prop;
/**
* Specify the labels
*/
protected static function defineList(): void
{
static::addEnum(static::FIRST_VALUE, 'My first value')->setProp(42);
static::addEnum(static::SECOND_VALUE, 'This is the second value')->setProp(0);
static::addEnum(static::THIRD_VALUE, 'Hey! 3rd value!')->setProp(-1);
}
/**
* @param int $value
* @return ComplexEnum
*/
private function setProp(int $value):self
{
$this->prop = $value;
return $this;
}
/**
* @return int|null
*/
public function getProp():?int
{
return $this->prop;
}
/**
* @return string
*/
public function doStuffWithProp():string
{
if ($this->prop === 42) {
return "This is the answer to life the universe and everything";
}
return "I don't know";
}
}
This method will return an array with constants value as keys and the associated Enum instance as values.
This method will return an array with constants value as keys and the label as values. It can be useful for HTML select options.
This method will return the label for a specific key.
If the key is unknown it will raise SimpleEnum\UnknownEumException
.
This method will return an Enum instance for a specific key.
If the key is unknown it will raise SimpleEnum\UnknownEumException
.
This method will return the label of a specific instance.
This method allows you to override the default label.
This method will reset the default label of the instance.
This method will return the key of the instance.
This method will check if the instance has the same key.
This method will check if the two instances have the same key.
This way to compare is really simple. You can do something like this :
$receivedValue = 2;
SimpleEnum::getInstance(SimpleEnum::THIRD_VALUE) == $receivedValue;
$receivedValue = 2;
SimpleEnum::getInstance(SimpleEnum::THIRD_VALUE)->is($receivedValue);