• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP枚举

php 搞java代码 3年前 (2022-08-01) 35次浏览 已收录 0个评论

PHP8.1新增

根底

Enum相似class

枚举的case能够定义0个或多个

枚举间比照没有意义,总是返回false。case是能够比照的

<code class="php"><?<a href="https://www.gaodaima.com/tag/php" title="查看更多关于php的文章" target="_blank">php</a>

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
  */

回退枚举

case默认是类实现的,case能够赋值标量,这时case的类型会由简单类型转为简略类型,这种称为回退

回退枚举只有一个value属性

回退枚举实现了BackedEnuminterface,额定裸露了from()tryFrom()办法

枚举值必须是确定的,不能是可变的

<code class="php"><?php
enum Suit: string
{
    case Hearts = 'H';
    case Diamonds = 'D';
    case Clubs = 'C';
    case Spades = 'S';
}

print Suit::Clubs->value;
print Suit::from('H');
print Suit::tryFrom('XX') ?? Suit::Hearts;

枚举办法

枚举能定义本人的办法、静态方法,也能实现interface,然而不反对继承

因为不反对继承所以拜访修饰符没什么用,都有public即可

<code class="php"><?php
interface Colorful
{
    public function color(): string;
}

enum Suit implements Colorful
{
    case Hearts;
    case Diamonds;
    case Clubs;
    case Spades;

    // 满足 interface 契约。
    public function color(): string
    {
        return match($this) {
            Suit::Hearts, Suit::Diamonds => 'Red',
            Suit::Clubs, Suit::Spades => 'Black',
        };
    }

    // 不是 interface 的一部分;也没问题
    public function shape(): string
    {
        return "Rectangle";
    }
    
    // 静态方法
    public static function fromLength(int $cm): static
    {
        return match(true) {
            $cm < 50 => static::Hearts,
            $cm < 100 => static::Diamonds,
            default => static::Clubs,
        };
    }
    
}

function paint(Colorful $c) { ... }

paint(Suit::Clubs);  // 失常

print Suit::Diamonds->shape(); // 输入 "Rectangle"

枚举常量

<code class="php"><?php
enum Size
{
    case Small;
    case Medium;
    case Large;

    public const Huge = self::Large;
}

应用Trait

在enum中应用trait时,不容许trait中蕴含属性,只能存在办法、静态方法


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP枚举

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址