列挙型 / Enum

(PHP 8 >= 8.1.0)

列挙型の基礎

列挙型は、クラスやクラス定数に対して、さらに制限を加えたものです。 ある型に対して、取り得る値の限られた集合を定義する方法を提供します。

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

function
do_stuff(Suit $s)
{
// ...
}

do_stuff(Suit::Spades);
?>

完全な説明は、 列挙型(Enum) を参照ください。

キャスト

列挙型を object にキャストしても、値は変更されません。 列挙型を array にキャストすると、 name というキーだけ(Pure Enum の場合) をもつ配列か、 namevalue というキー(Backed Enum の場合) を持つ配列が生成されます。 それ以外のキャストを行っても、エラーが発生します。

add a note

User Contributed Notes 1 note

up
45
esdras-schonevald
1 year ago
https://gist.github.com/esdras-schonevald/71a6730e6191c5e9c053e2f65b839eec

<?php

declare(strict_types=1);

/**
* This is a sample
* How to use Enum to create a custom exception cases
* PHP 8.1^
*/

enum MyExceptionCase {
case
InvalidMethod;
case
InvalidProperty;
case
Timeout;
}

class
MyException extends Exception {
function
__construct(private MyExceptionCase $case){
match(
$case){
MyExceptionCase::InvalidMethod => parent::__construct("Bad Request - Invalid Method", 400),
MyExceptionCase::InvalidProperty => parent::__construct("Bad Request - Invalid Property", 400),
MyExceptionCase::Timeout => parent::__construct("Bad Request - Timeout", 400)
};
}
}

// Testing my custom exception class
try {
throw new
MyException(MyExceptionCase::InvalidMethod);
} catch (
MyException $myE) {
echo
$myE->getMessage(); // Bad Request - Invalid Method
}
To Top