文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

PHP8.1新特性Enum像Java一样使用枚举

2023-10-20 09:08

关注

了解Java的Php程序员都知道,PHP一直以来是没有Enum这个特性的,虽然有一个扩展的类可以实现类似的功能,但总感觉不是“原生”,刚好现在需要用到PHP8.1版本,这里记录一下对PHP的枚举Enum的简单使用。

先定义一个枚举Trait,因为PHP的枚举不能扩展。

name;        }, self::cases());    }        // 以['key' => 'value', ...]形式返回枚举内容,可供select组件选择使用    public static function keyValues(): array    {        $result = [];        foreach (self::cases() as $item) {            $result[$item->name] = $item->value;        }        return $result;    }    // 判断持久层返回的是否相同    public function equal(string $value): bool    {        return self::tryFrom($value) === $this;    }    // 判断string key是否包含在枚举里面    public static function include(string $value): bool    {        return in_array($value, self::keys());    }    // 判读多个string key是否全部包含在枚举里面    public static function includeAll(array $names): bool    {        $keys = self::keys();        foreach ($names as $name) {            if (!in_array($name, $keys)) {                return false;            }        }        return true;    }}

定义枚举

具体应用

 valueProductType::keyValues();// output: ['PRODUCT' => '商品', 'SERVICE' => '服务', 'CONSUMPTION' => '消耗品']// 这里我用于前端Select组件选择,保存key值在数据库中,如:ProductModel.product_type = 'PRODUCT'// 在前端列表等显示界面,通过product_type = 'PRODUCT'显示出“商品”// 简单判断类型if (ProductType::PRODUCT->equal(ProductModel.product_type)) {    // ...} else if (ProductType::SERVICE->equal(ProductModel.product_type)) {    // ...} else {}// 判断是否包含key,如:前端输入的值是否合法$formData = ['product_type' => 'PRODUCT'];ProductType::include($formData['product_type']);// output: true// 判断是否包含多个key,如:前端输入的多个值是否合法$formData = ['product_type' => ['PRODUCT', 'PRODUCT2']];ProductType::includeAll($formData['product_type']);// output: false

其它应用

前端的使用基本满足简单应用的情况了。如果还有更复杂的,可以深入了解。

例如使用PHP的注解结合枚举使用:

1、定义注解

value = $value;    }}

2、在枚举中使用 

name);        $attributes = $ref->getAttributes();        foreach ($attributes as $attribute) {            $args = $attribute->getArguments();            return $args[0];        }        return '';    }    public static function keyValues(): array    {        $result = [];        foreach (self::cases() as $item) {            $result[$item->value] = $item->getDescription();        }        return $result;    }}ProductType::PRODUCT->name; // PRODUCTProductType::PRODUCT->value; // 1ProductType::PRODUCT->getDescription(); // 商品ProductType::keyValues(); // [1 => '商品', 2 => '服务', 3 => '消耗品']

来源地址:https://blog.csdn.net/keechi/article/details/127383813

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯