forget for get

覚えるために忘れる

PHPの列挙型(Enum)

test.php

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

$a = Suit::Spades;
$b = Suit::Spades;

var_dump($a); // Suit::Spades
var_dump($a === $b); // true
var_dump($a instanceof Suit); // true
echo $a->name; // Spades

test2.php

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

$c = Suit::Clubs;
echo $c->value; // C

$d = Suit::from('H');
var_dump($d); // Suit::Hearts

// $e = Suit::from('Z'); // 不正なデータはエラー
// PHP Fatal error:  Uncaught ValueError: "Z" is not a valid backing value for enum "Suit"
$e = Suit::tryFrom('Z') ?? Suit::Spades; // 不正なデータはnullが返る
var_dump($e); // Suit::Spades

var_dump(Suit::cases()); // [Suit::Hearts, Suit::Diamonds, Suit::Clubs, Suit:Spades]