Memo

メモ > 技術 > プログラミング言語: 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