もがき系プログラマの日常

もがき系エンジニアの勉強したこと、日常のこと、気になっている技術、備忘録などを紹介するブログです。

php8.1のenumを使ってみる

はじめに

こんばんは。

前回のphp8.1をインストールしてみたのですが、今回はphp8.1の目玉っぽい 列挙型を試してみます。

前回の記事は以下

kojirooooocks.hatenablog.com

www.php.net

本題

試したバージョンはこちら

$php -v
PHP 8.1.6 (cli) (built: Jun 10 2022 23:47:15) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.6, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.6, Copyright (c), by Zend Technologies
    with Xdebug v3.1.4, Copyright (c) 2002-2022, by Derick Rethans

cases()

<?php

enum Status
{
  case Enable;
  case Disable;
}

var_dump(Status::cases());
// array(2) {
//   [0] =>
//   enum Status::Enable;
//   [1] =>
//   enum Status::Disable;
// }

Backed Enum

<?php

enum Status: int
{
  case Enable = 1;
  case Disable = 0;
}

var_dump(Status::Enable->value);  // int(1)
var_dump(Status::Disable->value); // int(0)
var_dump(Status::tryFrom(2));        // NULL
var_dump(Status::tryFrom(1));        // enum Status::Enable : int(1);

メソッド

<?php

enum Color: int
{
  case Red = 10;
  case Blue = 20;
  case Yellow = 30;
  case Green = 40;
  case Black = 50;
  case White = 60;

  public function isRGB(): bool
  {
    return match($this) {
      Color::Red, Color::Green, Color::Blue => true,
      default => false
    };
  }
}

var_dump(Color::Red->isRGB());   // => bool(true)
var_dump(Color::Blue->isRGB());  // => bool(true)
var_dump(Color::Black->isRGB()); // => bool(false)

終わりに

メソッドもてるのが面白いですね。

メソッドもてるからトレイトも使えるみたいです。

個人的にトレイトは混乱するので、あんま使わないかもですが、効率よく使えたらかっこいいなと思いました。

現場からは以上です。