略微加速

PHP官方手册 - 互联网笔记

PHP - Manual: 枚举基础

2024-12-27

枚举基础

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

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

以上声明了新的枚举类型 Suit,仅有四个有效的值: Suit::HeartsSuit::DiamondsSuit::ClubsSuit::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 没什么用处,但在语法上也是有效的。

枚举条目的语法规则适用于 PHP 中的任何标签,参见常量

默认情况下,枚举的条目(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"
?>
add a noteadd a note

User Contributed Notes 2 notes

up
15
sajjad.golchin
5 months ago
<?php

enum Colors
{
    case
Red;
    case
Blue;
    case
Green;

    public function
getColor(): string
   
{
        return
$this->name;
    }
}

function
paintColor(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
*/
?>
up
1
Andrzej
1 month ago
Basic enumerations does not implement from() or tryFrom() methods, but it is possible to return the corresponding Enum Case from variable using the constant() function.

<?php

enum Limit
{
    case
Min;
    case
Max;
}

$value = 'Min';

$limit = constant("Limit::{$value}");

$limit === Limit::Min; // true

?>

官方地址:https://www.php.net/manual/en/language.enumerations.basics.php

北京半月雨文化科技有限公司.版权所有 京ICP备12026184号-3