Perfect Enums in PHP

I recently came up with this solution for enums in php:

    class Enum implements Iterator {
        private $vars = array();
        private $keys = array();
        private $currentPosition = 0;

        public function __construct() {
        }

        public function current() {
            return $this->vars[$this->keys[$this->currentPosition]];
        }

        public function key() {
            return $this->keys[$this->currentPosition];
        }

        public function next() {
            $this->currentPosition++;
        }

        public function rewind() {
            $this->currentPosition = 0;
            $reflection = new ReflectionClass(get_class($this));
            $this->vars = $reflection->getConstants();
            $this->keys = array_keys($this->vars);
        }

        public function valid() {
            return $this->currentPosition < count($this->vars);
        }

}

Example:

class ApplicationMode extends Enum
{
    const production = 'production';
    const development = 'development';
}

class Application {
    public static function Run(ApplicationMode $mode) {
        if ($mode == ApplicationMode::production) {
        //run application in production mode
        }
        elseif ($mode == ApplicationMode::development) {
            //run application in development mode
        }
    }
}

Application::Run(ApplicationMode::production);
foreach (new ApplicationMode as $mode) {
    Application::Run($mode);
}

it works just fine, I have IDE hints, I can iterate over all my enumerations, but I think I miss some enumeration functions that may be useful. so my question is: what features can I add to make more use of enums or to make them more practical to use?

+3
source share
1 answer

I think you can implement ArrayAccess and Countable

 class Enum implements ArrayAccess, Countable, Iterator {
+2
source

Source: https://habr.com/ru/post/1768403/


All Articles