0Pricing
PHP Academy · レッスン

列挙型(Enum)

PHP 8.1のバックドEnumと純粋Enumで、型安全な値の集合を定義します

「列挙型(Enum)」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。

列挙型とは

PHP 8.1でenumsが導入されました。これは変数をあらかじめ定義した名前付きの値の集合に制限する特殊な型で、より表現力が高く型安全なコードを実現します。

Pure Enum(Unit Enum)

Pure Enumには、関連付けられた値を持たない名前付きのcaseがあります。状態、方向、ステータスの表現に適しています。

<?php
enum Status {
    case Active;
    case Inactive;
    case Banned;
}

$s = Status::Active;
echo $s->name; // "Active"

Backed Enum

Backed Enumでは、各caseにスカラー値(intまたはstring)を割り当てます。データベースへの保存やAPIレスポンスに便利です。

<?php
enum Color: string {
    case Red   = "red";
    case Green = "green";
    case Blue  = "blue";
}

echo Color::Red->value; // "red"

fromとtryFrom

生の値をenumのcaseに戻すには、from()(無効な値で例外をスロー)またはtryFrom()(無効な値でnullを返す)を使用します。

<?php
$color = Color::from("red");      // Color::Red
$maybe = Color::tryFrom("purple"); // null

型ヒントでのenum

パラメーターや戻り値の型ヒントにenumを使用すると、PHPによって有効なcaseだけが渡されるよう強制されます。

<?php
function paint(Color $color): void {
    echo "Painting with ".$color->value;
}
paint(Color::Blue); // "Painting with blue"

matchでのenum case

enumはmatch式と組み合わせると、すべてのケースを網羅して処理するのに適しています。

<?php
$label = match($status) {
    Status::Active   => "Active user",
    Status::Inactive => "Inactive account",
    Status::Banned   => "Banned",
};
// PHP can warn if cases are unhandled

enumによるインターフェースの実装

enumはインターフェースを実装できるため、ポリモーフィックな振る舞いを実現できます。

<?php
interface HasLabel {
    public function label(): string;
}

enum Status: string implements HasLabel {
    case Active   = "active";
    case Inactive = "inactive";
    public function label(): string {
        return ucfirst($this->value);
    }
}

enumのメソッド

enumにはメソッドを定義できます。ただし、コンストラクターや変更可能なプロパティは定義できません。

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

    public function color(): string {
        return match($this) {
            Suit::Hearts, Suit::Diamonds => "red",
            Suit::Clubs,  Suit::Spades  => "black",
        };
    }
}

enumの定数

enumには、関連するスカラー値を表す定数(caseではありません)を定義できます。

<?php
enum Direction {
    case North;
    case South;
    const DEFAULT = self::North;
}

caseの一覧取得

EnumName::cases()は、すべてのenum caseオブジェクトの配列を返します。ドロップダウンの選択肢の生成などに便利です。

<?php
$options = Color::cases();
foreach ($options as $c) {
    echo $c->name.": ".$c->value."\n";
}

enumとクラス定数の違い

enumは型安全性を保証するため、Status enumが必要な場所に誤って整数1を渡すことはできません。クラス定数にはこのような保証がありません。

まとめ

enumは、固定された値の集合を型安全に表現します。状態にはPure Enumを、データベースやAPIの値が必要な場合にはBacked Enumを使用してください。安全に解析するにはtryFrom()を使用します。

理解度チェック

一致するcaseがない場合、Color::tryFrom("invalid")は何を返すでしょうか。

よくある質問

「列挙型(Enum)」レッスンは無料ですか?

はい。「列挙型(Enum)」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。

「列挙型(Enum)」で何を学びますか?

PHP 8.1のバックドEnumと純粋Enumで、型安全な値の集合を定義します ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

PHP Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「列挙型(Enum)」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPHP Academyレッスンでコードを書いて実行できますか?

はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. match式と名前付き引数
  2. Nullsafe演算子と共用体型
  3. 列挙型(Enum)
  4. Fiber:協調的な並行処理
← PHP Academyに戻る