2010-10-07 7 views
3

Récemment je suis venu avec cette solution pour énumérations en php:énumérations parfait en 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); 
     } 

} 

Exemple:

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); 
} 

Il fonctionne parfaitement, j'ai des notes IDE, je peux parcourir tous mes enums mais je pense que je manque quelques fonctionnalités enums qui peuvent être utiles. donc ma question est: quelles fonctionnalités puis-je ajouter pour faire plus d'utilisation d'enums ou pour le rendre plus pratique à utiliser?

+5

* (officiel) * [Demande de commentaires: Enum] (http://wiki.php.net/rfc/enum) et aussi [SplEnum ] (http://de2.php.net/manual/fr/class.splenum.php) – Gordon

Répondre

2

Je pense que vous pouvez mettre en œuvre olso ArrayAccess et Countable

class Enum implements ArrayAccess, Countable, Iterator {