PHP学习笔记15:枚举

本文介绍了PHP从8.0版本开始支持的枚举类型,包括纯枚举和回退枚举的创建与使用,枚举的静态方法、枚举常量以及与普通类的区别。枚举为PHP提供了更严格的类型安全,减少了类型错误,增强了代码的可读性和扩展性。
摘要由CSDN通过智能技术生成

PHP学习笔记15:枚举

image-20211129162010327

图源:php.net

从php 8.0.0开始,php支持枚举类型。简单地说,枚举代表一类有限的数据集,这在计算机领域非常常见,比如说用户类型(管理员,普通用户,VIP等),再比如订单类型(团队订单,个人订单等)。

在以前php不支持枚举的时候,我通常会使用类常量:

<?php
class UserType
{
   
    const ADMINI = 0; //管理员
    const NORMAL = 1; //普通用户
    const VIP = 2; //vip
}
function create_user(string $name, int $type)
{
   
    echo "create new user, name:{
     $name}, type:{
     $type}" . PHP_EOL;
}
create_user("admin", UserType::ADMINI);
create_user("test", 5);
// create new user, name:admin, type:0
// create new user, name:test, type:5

虽然这么做很方便,但是其实是有隐患的。原因是定义在类中的常量本身并不是一个真正的“封闭类型”,也就是说create_user函数的$type参数只能定义为int,这就给非法传入参数提供了可能。当然我们可以添加额外的检测代码,但那样很麻烦,也不利于代码扩展。

最佳的解决方式就是引入真正的枚举:

<?php

namespace xyz\icexmoon\php_notes\ch15;

enum UserType
{
   
    case ADMIN; //管理员
    case NORMAL; //普通用户
    case VIP; //vip
}
function create_user(string $name, UserType $type)
{
   
    echo "create new user, name:{
     $name}, type:{
     $type->name}" . PHP_EOL;
}
create_user("admin", UserType::ADMIN);
// create new user, name:admin, type:ADMIN
create_user("test", 5);
// PHP Fatal error:  Uncaught TypeError: xyz\icexmoon\php_notes\ch15\create_user():

在编译期就检查出了类型错误。

下面来详细介绍枚举类型。

枚举类型分为两种:纯枚举和回退枚举。

纯枚举

纯枚举就是我们上边展示过的普通形式的枚举,使用enum关键字和case就可以简单创建。

普通枚举是利用类来创建的,其中每一个case定义的枚举值都是枚举类型的单例。作为单例,我们可以使用===来比较是否为同一个枚举值:

<?php

namespace xyz\icexmoon\php_notes\ch15;

enum UserType
{
   
    case ADMIN; //管理员
    case NORMAL; //普通用户
    case VIP; //vip
}
$ut_admin1 = UserType::ADMIN;
$ut_admin2 = UserType::ADMIN;
var_dump($ut_admin1 === $ut_admin2);
// bool(true)
var_dump($ut_admin1 === UserType::VIP);
// bool(false)

===!==以外的比较都是没有意义的:

var_dump($ut_admin1 > $ut_admin2);
// bool(false)
var_dump($ut_admin1 < UserType::VIP);
// bool(false)

枚举值有一个只读属性name,可以用于打印枚举值的名称:

echo $ut_admin1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值