根据用例,我通常会使用一些简单的实现代码,如下面的代码:

abstract class DaysOfWeek

{

const Sunday = 0;

const Monday = 1;

// etc.

}

$today = DaysOfWeek::Sunday;

然而,其他用例可能需要对常量和值进行更多的验证。下面是一个扩展的示例,可以更好地服务于更广泛的情况。

abstract class BasicEnum {

private static $constCacheArray = NULL;

private static function getConstants() {

if (self::$constCacheArray == NULL) {

self::$constCacheArray = [];

}

$calledClass = get_called_class();

if (!array_key_exists($calledClass, self::$constCacheArray)) {

$reflect = new ReflectionClass($calledClass);

self::$constCacheArray[$calledClass] = $reflect->getConstants();

}

return self::$constCacheArray[$calledClass];

}

public static function isValidName($name, $strict = false) {

$constants = self::getConstants();

if ($strict) {

return array_key_exists($name, $constants);

}

$keys = array_map('strtolower', array_keys($constants));

return in_array(strtolower($name), $keys);

}

public static function isValidValue($value, $strict = true) {

$values = array_values(self::getConstants());

return in_array($value, $values, $strict);

}

}

通过创建一个扩展BasicEnum的简单enum类,您现在可以使用方法来进行简单的输入验证:

abstract class DaysOfWeek extends BasicEnum {

const Sunday = 0;

const Monday = 1;

const Tuesday = 2;

const Wednesday = 3;

const Thursday = 4;

const Friday = 5;

const Saturday = 6;

}

DaysOfWeek::isValidName('Humpday'); // false

DaysOfWeek::isValidName('Monday'); // true

DaysOfWeek::isValidName('monday'); // true

DaysOfWeek::isValidName('monday', $strict = true); // false

DaysOfWeek::isValidName(0); // false

DaysOfWeek::isValidValue(0); // true

DaysOfWeek::isValidValue(5); // true

DaysOfWeek::isValidValue(7); // false

DaysOfWeek::isValidValue('Friday'); // false

原创文章,作者:犀牛前端部落,如若转载,请注明出处:https://www.pipipi.net/4493.html

php定义枚举,PHP枚举相关推荐

  1. 枚举,如何定义一个枚举,枚举的本质

    什么是枚举? 枚举是一个引用类型,枚举是一个规定了取值范围的数据类型 枚举变量不能使用其他的数据,只能使用枚举中常量赋值,提高程序安全性 定义枚举使用enum关键字 定义枚举类需要注意的点: 1.枚举 ...

  2. Java--枚举类型(枚举类型介绍 定义枚举类型 枚举类型的使用 枚举类型的注意事项 遍历枚举项)

    01: Java–枚举类型(枚举类型介绍 & 定义枚举类型 & 枚举类型的使用 & 枚举类型的注意事项 & 遍历枚举项) 02: Java–枚举类型(枚举类型实现接口 ...

  3. java 枚举定义变量_Java枚举(enum)

    Free Talk 上学期上Java课时都没有听说过枚举的概念,这次偶然在JavaGuide博客中看到了,就想写一些枚举相关知识.本篇文章会较为深入地讲解一下枚举的强大功能. 写这边博客的时候,又发现 ...

  4. c++ main函数调用 类中的枚举_为啥用枚举,枚举有哪些用法?

    Java基础:枚举的用法与原理 在学习过程中,我们也只是在定义常量的时候,会意识到枚举的存在,而定义常量其实可以在类中实现,这时就会感觉枚举有点鸡肋.但在实际项目开发的过程中,枚举因相当迷人的特性而受 ...

  5. java枚举和枚举类_Java枚举:您拥有优雅,优雅和力量,这就是我所爱!

    java枚举和枚举类 当Java 8即将面世时,您确定您对Java 5中引入的枚举很熟悉吗? Java枚举仍然被低估了,很可惜,因为它们比您想象的要有用,它们不仅仅用于通常的枚举常量! Java枚举是 ...

  6. java的枚举_Java 枚举

    Java 枚举 知识点 概念 enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性. 在Java中,被 enum 关键字修饰的类型就是枚举类型.形式如下: enum Col ...

  7. kotlin枚举_Kotlin枚举班

    kotlin枚举 In this tutorial, we'll be looking into Kotlin Enum classes. What's in store for them? How ...

  8. 面试官:为啥需要枚举?枚举有什么作用?怎么用枚举实现单例?

    点赞再看,养成习惯,微信搜索[三太子敖丙]关注这个互联网苟且偷生的工具人. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的 ...

  9. Typescript - enum 枚举类型(数值型枚举 / 字符串枚举 / 常量枚举 / 异构枚举 / 计算枚举成员 / 联合枚举和枚举成员类型 / 运行时的枚举 / 环境枚举 / 对象与枚举)教程

    前言 Enums(枚举)是 TypeScript 的少数功能之一,它不是 JavaScript 的类型级扩展,仅支持数字的和基于字符串的枚举. 使用枚举您可以定义一组带名字的常量,并且清晰地表达意图或 ...

  10. java的枚举类型是什么_什么是枚举(java枚举类型enum用法)

    最佳回答 枚举 1.枚举 (enumeration) 值类型的一种特殊形式,它从 System.Enum 继承,并为基础基元类型的值提供备用名称.枚举类型有名称.基础类型和一组字段.基础类型. &qu ...

最新文章

  1. 推荐60+ Flex开发参考网站
  2. linux中时间戳与date的互转
  3. 谁是最强的女汉子_JAVA
  4. 支持向量机SVM 简要推导过程
  5. CMM/CMMI的20年和敏捷十年
  6. flash 多个文件上传
  7. 漫画|你还记得原生的JDBC怎么连接数据库吗?
  8. Linux xargs命令
  9. ThoughtWorks技术雷达专区
  10. art-template入门(五)之模板变量
  11. 撸完这些JVM知识点,明天就去面试阿里P6+
  12. 【恋上数据结构】计数排序
  13. Linux常用解压文件
  14. mysql常用调试工具_最常用的8款PHP调试工具
  15. 使用OpenCV获取图像中某一点的像素值和修改某一点的像素值
  16. 扭矩大好还是马力大好_汽车马力大好还是小好,马力越大汽车的动力性就越好?...
  17. cdr多页面排版_CDR排版技巧
  18. Android 性能优化四个方面总结
  19. czl蒻蒟的OI之路3
  20. 农作物病害识别_FarmEasy:向农民推荐农作物变得容易

热门文章

  1. CocoaPods 的安装(第三方开源类库)
  2. jQuery 集合 搜索操作(父辈元素搜索、同辈元素搜索、子元素搜索)
  3. centos SSH免密登录
  4. RedissonMultiLock + RedissonLock部分源码
  5. RocketMQ中的autoCreateTopicEnable是如何实现自动创建topic?
  6. 如何查看Linux的系统是64位的还是32位的
  7. 【jQuery获取下拉框select、单选框radio、input普通框的值和checkbox选中的个数】
  8. java的四种取整方法
  9. Python 的List排序
  10. RotateMenu简单地旋转菜单控件《IT蓝豹》