Lesson 12

列挙型

Lesson 12 Chapter 1
列挙型

Lesson12では列挙型について学習していきます。列挙型もLesson11と同様、開発段階から開発後の運用という点で主に効率化に該当する部分となっています。

列挙型とは

Lesson12では列挙型について学習していきますが、PHP8.1から導入されたものなので、ご自身のPHPのバージョンを確認の上、学習を進めていきましょう。 列挙型とは一般的にEnumとも呼ばれます。例えば、個人情報で住所を入力する際に、都道府県のセレクトタグを目にしたことがあるかと思いますが、そのような定数を扱う場面でEnumが多く使われます。

定数とは

変数のように値が後から変わるものに対し、値が変わらないものを定数と呼ぶ。

使用例としては、外部ファイルにまとめ、必要に応じて呼び出すイメージになります。上記の都道府県を例にすると、todofuken.phpを作成し47都道府県の定数を定義しておきます。そして会員登録ページや登録内容変更ページなどからtodofuken.phpを呼び出すことで、47都道府県の情報を使用することが可能です。これらはEnumを使用せずとも実装は可能ですが、下記がEnumの大きなメリットとなります。

列挙型(Enum)のメリット

  • 限定した独自の型を定義することができ、不正を防ぐことができる。
  • スマートな記述量で実装ができる。

chapter2では実際に列挙型を使用していきましょう。

Lesson 12 Chapter 2
列挙型の使用

それでは実際にEnumを使用していきます。一般的なEnumの構文は以下になります。

Pure Enum
enum enum名{
  case name名;
  case name名;
  case name名;
}

Pure Enum

まず最初にEnumの種類の一つであるPure Enumのパターンについて、例をもとに学習していきます。Pure EnumとはデフォルトのEnumを指し、その特徴としてはスカラー値を持たないことです。

スカラー値とは

文字列(string)、整数(int)、論理値(boolean)、浮動小数点数(float,double)のデータ型のこと。

下記構成でファイルを作成しましょう。

XAMPP > htdocs > Lesson12 > blood_type.php

blood_type.php
<?php
enum BloodType
{
  case TYPE_A;
  case TYPE_B;
  case TYPE_AB;
  case TYPE_O;
}

BloodTypeというEnumを作成し、name名はcaseを使用して定義していきます。

XAMPP > htdocs > Lesson12 > index.php

index.php
<?php

require_once("blood_type.php")

$typeA = BloodType::TYPE_A;
echo $typeA->name;

Enumで定義した値を使用する場合はクラス同様インスタンスを作成し、作成したインスタンスから値(name)へアクセスすることで値の呼び出しが可能です。

Enumのインスタンス作成と値の呼び出し

$変数 = Enum名::case名;
$変数->name;

出力結果
TYPE_A

以上がデフォルトのEnum、Pure Enumでした。

Backed Enum

PureEnumに対してスカラー値をもつEnumをBacked Enumを呼びます。こちらはデータ型の定義も行うのでより厳密に値の情報を管理することが可能です。

Backed Enum
enum enum名: データ型{
  case name名 = value名;
  case name名 = value名;
  case name名 = value名;
}

それでは例をもとに学習していきます。先ほどの例文を下記に修正しましょう。

XAMPP > htdocs > Lesson12 > blood_type.php

blood_type.php
<?php
enum BloodType: string
{
  case TYPE_A = "A型";
  case TYPE_B = "B型";
  case TYPE_AB = "AB型";
  case TYPE_O = "O型";
}

注意

「: string」の部分は戻り値です。

戻り値は「文字列ですよ」と指定している部分になる為、整数など異なるスカラー値を戻り値に設定してしまうとエラーが発生します。

又、スカラー値はstring、int、boolean、float、doubleと存在しますが、Enumに設定できるのはstringとintのみになります。

XAMPP > htdocs > Lesson12 > index.php

index.php
<?php
require_once("blood.php");

$typeA = BloodType::TYPE_A;
echo $typeA->name;

// 追加
echo "<br>";
echo $typeA->value;

先ほどに加えて2行追加しました。valueへアクセスすることでvalueに設定しているA~O型を呼び出すことが可能となります。

出力結果
TYPE_A
A型

列挙型(Enum)のまとめ

  • 定数の値を管理しておく場所として使用されるケースが多い。
  • PureEnumとBackedEnumを必要に応じて使い分ける。
  • Enumのインスタンス作成は「$変数 = Enum名::name名」とする。
  • 「$変数->name」「$変数->value」とすることで、定義している値を使用することができる。