PHP枚举

简介: PHP语言8.1版本新增枚举类型


基础

Enum类似class

枚举的case可以定义0个或多个

枚举间对比没有意义,总是返回false。case是可以对比的

<?php

 

enumColors

{

    caseRed;

    caseBlue;

    caseGreen;

 

    publicfunctiongetColor(): string

    {

        return$this->name;

    }

}

 

functionpaintColor(Colors$colors): void

{

    echo"Paint : " . $colors->getColor() . PHP_EOL;

}

 

paintColor(Colors::Red);

paintColor(Colors::Green);

paintColor(Colors::Blue);

 

/*

    output :

    ------------------------

    Paint : Red

    Paint : Green

    Paint : Blue

 */

回退枚举

case默认是类实现的,case可以赋值标量,这时case的类型会由复杂类型转为简单类型,这种称为回退

回退枚举只有一个value属性

回退枚举实现了BackedEnuminterface,额外暴露了from()tryFrom()方法

枚举值必须是确定的,不能是可变的

<?php

enumSuit: string

{

   caseHearts='H';

   caseDiamonds='D';

   caseClubs='C';

   caseSpades='S';

}

 

printSuit::Clubs->value;

printSuit::from('H');

printSuit::tryFrom('XX') ??Suit::Hearts;

枚举方法

枚举能定义自己的方法、静态方法,也能实现interface,但是不支持继承

因为不支持继承所以访问修饰符没什么用,都有public即可

<?php

interfaceColorful

{

   publicfunctioncolor(): string;

}

 

enumSuitimplementsColorful

{

   caseHearts;

   caseDiamonds;

   caseClubs;

   caseSpades;

 

   // 满足 interface 契约。

   publicfunctioncolor(): string

   {

       returnmatch($this) {

           Suit::Hearts, Suit::Diamonds=>'Red',

           Suit::Clubs, Suit::Spades=>'Black',

       };

   }

 

   // 不是 interface 的一部分;也没问题

   publicfunctionshape(): string

   {

       return"Rectangle";

   }

   

   // 静态方法

   publicstaticfunctionfromLength(int$cm): static

   {

       returnmatch(true) {

           $cm<50=>static::Hearts,

           $cm<100=>static::Diamonds,

           default=>static::Clubs,

       };

   }

   

}

 

functionpaint(Colorful$c) { ... }

 

paint(Suit::Clubs);  // 正常

 

printSuit::Diamonds->shape(); // 输出 "Rectangle"

枚举常量

<?php

enumSize

{

    caseSmall;

   caseMedium;

   caseLarge;

 

   publicconstHuge=self::Large;

}

使用Trait

在enum中使用trait时,不允许trait中包含属性,只能存在方法、静态方法


目录
相关文章
|
监控 Unix Linux
|
9月前
|
人工智能 JavaScript 测试技术
构建智能 API 开发环境:在 Cursor 中连接 Apifox MCP Server
本文介绍了如何将Apifox MCP Server与Cursor结合,通过AI直接获取和理解API文档,大幅提升开发效率。首先需配置Apifox的Access Token和项目ID,并在Cursor中设置MCP连接。实际应用场景包括快速生成模型代码、同步更新接口文档与代码、生成CRUD操作、搜索API文档及自动生成测试用例。此外,还提供了管理多项目、安全性实践和优化AI响应质量的技巧。这种组合可显著减少从API规范到代码实现的时间,降低错误率并加速迭代过程,为开发者带来更高效的体验。
|
开发工具 git
git分支管理master/hotfix/develop/feature/release
采用合理的Git分支管理模型可以显著提升团队协作效率和代码管理的质量。本文介绍的 `master`、`develop`、`feature`、`release`和 `hotfix`分支模型是一个行之有效的方法,适用于大多数软件开发项目。通过清晰地划分各个分支的职责,团队成员可以更专注于各自的开发任务,同时确保代码库的稳定性和可维护性。
1353 2
|
JavaScript 前端开发 Java
uniapp Android 原生插件开发(Module 扩展为例·2022)(一)
uniapp Android 原生插件开发(Module 扩展为例·2022)
2349 0
uniapp Android 原生插件开发(Module 扩展为例·2022)(一)
|
安全 开发工具 git
git合并错了,我想回退到之前的版本
git合并错了,我想回退到之前的版本
|
XML 小程序 安全
微信第三方开放平台代小程序实现业务
有没有想过,只需要开发一套公众号/小程序代码,以之为模板,再来一套后台管理系统,把在微信公众号后台做的那些事都搬到我们自己的系统中。来一个业务相同的小程序,只需要管理员授权后,只要在我们的系统中点点几个按钮,就可以把小程序发布上线,一次开发供 N 个公众号使用,提供标准化的接口服务来满足业务的基础需求。通过扫描二维码授权给平台,帮助 N 多个公众号代实现业务,不再需要理解繁琐参数设置,并且密码不提供给开发者,保证安全,真正做到解放运营同学和开发的双手,有更多的时间去谈女朋友,那该多好。
704 0
微信第三方开放平台代小程序实现业务
|
程序员 编译器 Linux
还不会打包Python程序?pyinstaller了解一下
对于专业的python程序员来说,python打包工具或许用得并不多。但是对于非专业人士来说,你给他写个python项目,要让他安装python、安装依赖等等,估计人都会抓狂。或者说,如果你不想暴露自己的项目代码,python打包工具就派上用场了,市面上有多种打包工具,这里就讲讲最常用的pyinstaller的使用方法吧。
464 0
还不会打包Python程序?pyinstaller了解一下
|
JavaScript Unix 关系型数据库
Unix时间戳 POSIX时间 Unix时间
时间戳是自 1970 年 1 月 1 日(00:00:00 GMT)以来的秒数,也被称为 Unix 时间戳(Unix Timestamp)。Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。
207107 2
|
Web App开发 移动开发 JavaScript
|
Unix 应用服务中间件 PHP