【问题标题】:Perfect Enums in PHP [duplicate]PHP中的完美枚举[重复]
【发布时间】:2011-04-22 07:44:33
【问题描述】:

最近我想出了这个 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);
        }

}

例子:

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

它工作得非常完美,我得到了 IDE 提示,我可以遍历我所有的枚举,但我想我错过了一些有用的枚举功能。 所以我的问题是:我可以添加哪些功能来更多地使用枚举或使其更实用?

【问题讨论】:

标签: php


【解决方案1】:

我认为你也可以实现 ArrayAccess 和 Countable

 class Enum implements ArrayAccess, Countable, Iterator {

【讨论】:

    猜你喜欢
    • 2012-11-16
    • 2013-08-01
    • 2017-03-25
    • 2013-11-06
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 2016-03-05
    • 1970-01-01
    相关资源
    最近更新 更多