メモ > 技術 > プログラミング言語: PHP > enum
enum
【Swift入門】enumの使い方をわかりやすくまとめてみた | 侍エンジニア塾ブログ | プログラミング入門者向け学習情報サイト
https://www.sejuku.net/blog/35711
Swiftなどではenum(列挙型)を使える。
これをPHPでも使う方法。
Enumを使ってフラグ値を良い感じに扱う - Qiita
https://qiita.com/akihiro-iwata/items/b580b225eba48d780e68
PHPで列挙型(enum)を作る - Qiita
https://qiita.com/Hiraku/items/71e385b56dcaa37629fe
以下、enumを使った具体的なコード。
<?php
/*
* 列挙型(enum)を作る
*/
abstract class Enum
{
private $scalar;
public function __construct($value)
{
$ref = new ReflectionObject($this);
$consts = $ref->getConstants();
if (!in_array($value, $consts, true)) {
throw new InvalidArgumentException;
}
$this->scalar = $value;
}
final public static function __callStatic($label, $args)
{
$class = get_called_class();
$const = constant($class . '::' . $label);
return new $class($const);
}
final public function valueOf()
{
return $this->scalar;
}
final public function __toString()
{
return (string)$this->scalar;
}
}
// トランプのスート型を定義する。4種類しか値を取らない
final class Suit extends Enum
{
const Spade = 1;
const Heart = 2;
const Club = 3;
const Diamond = 4;
}
// インスタンス化
$suit = new Suit(Suit::Spade);
echo $suit; // spade
echo '<hr>';
echo $suit->valueOf(); // spade
echo '<hr>';
$suit = new Suit(Suit::Heart);
echo $suit;
echo '<hr>';
// __callStaticを定義してあるのでnewを使わずこのように書くことができる(PHP5.3以降)
$suit = Suit::Spade;
if ($suit == Suit::Spade) {
echo 'スペードです。';
} else {
echo 'スペードではありません。';
}
// 存在しない値を指定するとエラー
//new Suit('uso800'); // InvalidArgumentException
//new Suit(Suit::TEST); // InvalidArgumentException
//Suit::TEST; // InvalidArgumentException
Advertisement