使用PHP来实现枚举的方法

  介绍

如何使用PHP来实现枚举? ?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!

枚举

在数学和计算机科学理论中,一个集的<强>枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。

枚举是一个被命名的整型常数的集合,枚举在日常生活中很常见,例如表示星期的周日,周一,周二,周三,周四,周五,周六就是一个枚举。——维基百科

业务场景

在实际开发过程中我们非常容易接触到枚举类型,但是又因为PHP原生对枚举的支持不是太好,所以很多时候开发人员并没有重视枚举的使用,而是使用全局常量或者类常量代替,而这两个数据原则上还是<代码>字符串>

业务

    <李>订单状态待支付/待发货/待收货/待评价李 <>李会员状态激活/未激活等等,很多时候我们都会用简单的1/2/3/4或者0/1这样的方式去代表,然后在文档或者注释中规定这些东西。

更高级一点儿的就是定义成常量,然后方便统一存取,但是常量的值还是是字符串,无法进行类型判断。

这里就要看一下PHP对枚举的支持,虽然PHP对枚举没有完美的支持,但是在SPL中还是有一个基础的枚举类

SPL枚举

SplEnum延伸SplType{/常量   const零__default=零;//方法   公共getConstList ((bool include_default美元=FALSE)):数组//继承的方法   SplType: __construct([混合initial_value美元[,bool严格美元]])   }

但是!这个需要额外的安装PECL用PECL安装<代码> Spl_Types>

直接手写一个。

开始准备

首先定一个枚举

Enum类   {//默认值   const __default=self:: WAIT_PAYMENT;//待付款   const WAIT_PAYMENT=0;//待发的货   const WAIT_SHIP=1;//待收的货   const WAIT_RECEIPT=2;//待评价   const WAIT_COMMENT=3;   }

这样似乎就完成了,我们直接使用<代码>枚举::WAIT_PAYMENT> 函数setStatus(枚举状态美元){//TODO   }   setStatus(枚举::WAIT_PAYMENT);//错误显然这是不行的因为上面常量的值时一个int并不是Enum类型。

这里我们就需要用到PHP面向对象中的一个魔术方法__toString ()

公共__toString(空白):字符串
__toString()方法用于一个类被当成字符串时应怎样回应。例如回声obj美元;应该显示些什么。此方法必须返回一个字符串,否则将发出一条E_RECOVERABLE_ERROR级别的致命错误。

现在我们来完善一下这个方法。

OrderStatus延伸Enum类   {//默认值   const __default=self:: WAIT_PAYMENT;//待付款   const WAIT_PAYMENT=0;//待发的货   const WAIT_SHIP=1;//待收的货   const WAIT_RECEIPT=2;//待评价   const WAIT_COMMENT=3;      公共函数__toString ()   {   返回& # 39;233 & # 39;;   }   }//对象   回波方法(orderStatus美元)。PHP_EOL;//布尔真   var_dump()美元orderStatus instanceof Enum);//233   echo $ orderStatus;

<强>初具模型

这里似乎实现了一部分,那我们应该怎么样让他做的更好吗?再来改造一下。

orderStatus延伸Enum类   {//默认值   const __default=self:: WAIT_PAYMENT;//待付款   const WAIT_PAYMENT=0;//待发的货   const WAIT_SHIP=1;//待收的货   const WAIT_RECEIPT=2;//待评价   const WAIT_COMMENT=3;/* *   * @var字符串   */保护美元价值;      公共函数__construct ($ value=https://www.yisu.com/zixun/null)   {   美元$ this ->价值=is_null(值)?自我::__default:美元价值;   }      公共函数__toString ()   {   返回(string) $ this ->价值;   }   }//1 ? ?   美元orderStatus=new orderStatus (orderStatus:: WAIT_SHIP);//对象   回波方法(orderStatus美元)。PHP_EOL;//布尔真   var_dump()美元orderStatus instanceof Enum);//1   回声orderStatus美元。PHP_EOL;//2 ? ?   美元orderStatus=new orderStatus ();//对象   回波方法(orderStatus美元)。PHP_EOL;//布尔真   var_dump()美元orderStatus instanceof Enum);//0   echo $ orderStatus;//3 ? ?   美元orderStatus=new orderStatus(“意外的参数”);//对象   回波方法(orderStatus美元)。PHP_EOL;//布尔真   var_dump()美元orderStatus instanceof Enum);//意外的参数   echo $ orderStatus;

使用PHP来实现枚举的方法