数字化技能提升教程,数字化时代生存宝典

首页 / 开发 / 后端开发 / PHP教程

PHP枚举基础

浏览:836
PHP教程
PHP教程
类型:后端开发

PHP教程提供了关于PHP语法、变量、函数、流程控制等概念的详细指导,同时介绍了常见的Web开发技术,如数据库操作、表单处理、会话管理等。通过学习PHP教程,您可以掌握如何使用PHP构建动态网页、开发Web应用程序,并了解如何与数据库进行交互、处理用户输入以及实现用户认证和授权等功能。

一、简介

PHP枚举,或称 “Enum”,能够让开发者自定义类型为一系列可能的离散值中的一个。 在定义领域模型中很有用,它能够“隔离无效状态”(making invalid states unrepresentable)。

枚举以各种不同功能的形式出现在诸多语言中。 在 PHP 中, 枚举是一种特殊类型的对象。Enum 本身是一个类(Class), 它的各种条目(case)是这个类的单例对象,意味着也是个有效对象 —— 包括类型的检测,能用对象的地方,也可以用它。

最常见的枚举例子是内置的 boolean 类型, 该枚举类型有两个有效值 true 和 false。 Enum 使开发者能够任意定义出用户自己的、足够健壮的枚举。

二、基础

Enum 类似 class,它和 class、interface、trait 共享同样的命名空间。 也能用同样的方式自动加载。 一个 Enum 定义了一种新的类型,它有固定、数量有限、可能的合法值。

<?php
enum Suit
{
case Hearts;
case Diamonds;
case Clubs;
case Spades;
}
?>

以上声明了新的枚举类型 Suit,仅有四个有效的值: Suit::Hearts、Suit::Diamonds、 Suit::Clubs、Suit::Spades。 变量可以赋值为以上有效值里的其中一个。 函数可以检测枚举类型,这种情况下只能传入类型的值。

<?php
function pick_a_card(Suit $suit) { ... }
$val = Suit::Diamonds;
// OK
pick_a_card($val);
// OK
pick_a_card(Suit::Clubs);
// TypeError: pick_a_card(): Argument #1 ($suit) must be of type Suit, string given
pick_a_card('Spades');
?>

一个枚举可以定义零个或多个case,且没有最大数量限制。 虽然零个 case 的 enum 没什么用处,但在语法上也是有效的。

默认情况下,枚举的条目(case)本质上不是标量。 就是说 Suit::Hearts 不等同于 "0"。 其实,本质上每个条目是该名称对象的单例。具体来说:

<?php
$a = Suit::Spades;
$b = Suit::Spades;
$a === $b; // true
$a instanceof Suit; // true
?>

由于对象间的大小比较毫无意义,这也意味着 enum 值从来不会 < 或 > 其他值。 当 enum 的值用于比较时,总是返回 false。这类没有关联数据的条目(case),被称为“纯粹条目”(Pure Case)。 仅包含纯粹 Case 的 Enum 被称为纯粹枚举(Pure Enum)。

枚举类型里所有的纯粹条目都是自身的实例。 枚举类型在内部的实现形式是一个 class。

所有的 case 有个只读的属性 name。 它大小写敏感,是 case 自身的名称。

<?php
print Suit::Spades->name;
// 输出 "Spades"
?>
广告合作

广告合作

QQ群号:4114653

QQ群号:4114653

温馨提示:

  1. 本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。
  2. 本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。