全网最全idea主题,phpstorm主题,webstorm主题免费下载

自己实现简单枚举——给php接上枚举这条断腿

枚举是所有开发语言中必须的基础设施,不可理解的是php并没有在语言层次提供枚举特性。这导致很多所谓‘资深’php开发人员一直都不知道枚举这个东西的存在。更不用说使用枚举实现业务。没有枚举的系统是危险的、烂的、扯淡的,如果你对这个界定有不同意见,请关闭当前网页,继续自我陶醉。

这里提供一个底成本的枚举实现。依赖phpstorm的代码补全功能,其他ide支持不明。比如拿星期举例。

<?php


namespace App;


class Enum
{
    const WEEK = [
        'MONDAY'=>[
            'v'=>1,
            'name'=>'星期一',
            'color'=>'yellow'
        ],
        'TUESDAY'=>[
            'v'=>1,
            'name'=>'星期二',
            'color'=>'red'
        ],
        //略...
    ];

    /**
     * 翻译枚举name值
     * @param $enum
     * @param $value
     * @return string
     */
    public static function getName($enum, $value){
        return static::getField($enum,$value,'name');
    }

    /**
     * 获取枚举项字段
     * @param $enum
     * @param $value
     * @param $field
     * @return string
     */
    public static function getField($enum,$value,$field){
        $item = static::getItem($enum,$value);
        if(!$item){
            return '错误值:' . $value;
        }
        return $item[$field];
    }

    /**
     * 根据指定字段的指定值返回枚举项
     * @param $enum
     * @param $field
     * @param $value
     * @return array
     */
    public static function getItemByField($enum,$field,$value){
        $r = [];
        foreach ($enum as $item){
            if($item[$field] === $value){
                $r[] = $item;
            }
        }
        return $r;
    }

    /**
     * 获取枚举项
     * @param $enum
     * @param $value
     * @param string $field
     * @return string
     */
    public static function getItem($enum,$value,$field = 'v'){
        foreach ($enum as $item){
            if($item[$field] == $value)
                return $item;
        }
        return null;
    }

}  

以上代码实现了一周天数的枚举,并且提供了基础的枚举方法, 在phpstorm中可以使用代码提示方便访问枚举值进行逻辑判断等操作。

这是使用php数组以及phpstorm的代码提示功能实现的简单枚举实现,当然有其他方式实现更加强大的枚举,一般的系统使用这种方式完全可以满足需求。

热门评论

    暂无