0
0

More than 1 year has passed since last update.

Enum(列挙型)とは?

Last updated at Posted at 2022-11-02

目次

  • 概要
  • Enum(列挙型)とは?
  • Enumの細かいルール
  • 最後に

概要

だいぶサボっていましたが、スキルアップのための不定期30分インプット・アウトプット投稿第四弾は、「Enum(列挙型)とは?」についてやっていこうと思います!
第三弾は、UMLを使ってクラス図を書く方法について投稿したのでよければ確認してみてください。

プログラミングを本格的に勉強し始めて約1年経ちましたが、お恥ずかしいことに「Enum」を知りませんでした。
最初にEnumを見た時読み方すら知りませんでしたが、「イーナム」って読むみたいです:grimacing:

Enum(列挙型)とは?

PHPドキュメントによるとEnumは、

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

らしいです。

噛み砕くと、
定数の定義と取得を簡単にしてくれる認識。
クラスでいうgetterが定数ごとの定義の必要がなく、caseで定義していないものは呼び出せないようにしているようです。
 

Pure Enumとは

値を含まない列挙子のこと。

  • PureEnumの実例。
<?php

declare(strict_types=1);

enum PurePrefecture
{
    case AICHI;
    case SHIZUOKA;
    case MIE;
}

var_dump(PurePrefecture::AICHI);
//出力結果 enum(PureEnum::AICHI)

var_dump(PurePrefecture::AICHI->name);
//出力結果 string(5) "AICHI"

Backed Enum

値を含む列挙子のこと。

  • BackedEnumの実例。
<?php

declare(strict_types=1);

enum BackedPrefecture: string
{
    case AICHI = "愛知県";
    case SHIZUOKA = "静岡県";
    case MIE = "三重県";
}

var_dump(BackedPrefecture::AICHI);
//出力結果 enum(PureEnum::AICHI)

var_dump(BackedPrefecture::AICHI->name);
//出力結果 string(5) "AICHI"

var_dump(BackedPrefecture::AICHI->value);
//出力結果 string(9) "愛知県"

※Backed Enumの持つことができる値のルール

  1. int型・string型のみ可(Union型も不可)
  2. 値は重複不可

Enumの細かいルールについて

Interfaceの実装とClass/Enumの拡張について

  1. Interfaceの実装は可能。
  2. Class/Enumの拡張は不可。

Enum内のメソッドルール

  1. staticメソッドの定義可能
  2. メソッドスコープも同様に「public」「protected」「private」から選択可能
  3. traitも「use」で使用可能

最後に

最初「Enum」を調べていて、classで定数を定義すれば同じことではないかなと思っていましたが、調べてみるとコード量がだいぶ少なくなることがわかり、それだけでもメリットだなと思いました。

1ヶ月くらいアウトプットをサボっていましたが、その間にも業務内外でインプットし続けているので、また投稿していこうと思います!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0