Nhà soạn nhạc myclabs/php-enum

Closed 2022/05/29にクローズ11

php-enumのメモ

PHP

なお2021/11/26に更新

このパッケージでできることをただ書き続ける
https. //github. com/myclabs/php-enum

返信

なお2021/11/26

定義
wikipediaの列挙型の例を使った

use MyCLabs\Enum\Enum;

class Cardsuit extends Enum
{
    public const CLUBS = 1;
    public const DIAMONDS = 2;
    public const HEARTS = 3;
    public const SPADES = 4;
}

1

なお2021/11/27

クラスなのでこういう書き方もできる

use MyCLabs\Enum\Enum;

class Cardsuit extends Enum
{
    public const CLUBS = 'C';
    public const DIAMONDS = 'D';
    public const HEARTS = 'H';
    public const SPADES = 'S';
}

返信を追加

なお2021/11/26

使ってみる

// 定数
echo Cardsuit::CLUBS;
>>> 1

// メソッド
// 内部で__callStatic[]が呼び出されて、インスタンスが返ってくる
$cardsuit =  Cardsuit::DIAMONDS[];
var_dump[$cardsuit];
>>> object[Cardsuit]#3 [2] {
  ["value":protected]=>
  int[2]
  ["key":"MyCLabs\Enum\Enum":private]=>
  string[8] "DIAMONDS"
}

1

なお2021/11/26に更新

こういう使い方もできる

$key = 'HEARTS';
$cardsuit =  Cardsuit::$key[];
var_dump[$cardsuit];
>>> object[Cardsuit]#2 [2] {
  ["value":protected]=>
  int[3]
  ["key":"MyCLabs\Enum\Enum":private]=>
  string[6] "HEARTS"
}

// 値からインスタンス生成が可能
// fromメソッドがいきなり登場
$cardsuit =  Cardsuit::from[3];
var_dump[$cardsuit];
>>> object[Cardsuit]#4 [2] {
  ["value":protected]=>
  int[3]
  ["key":"MyCLabs\Enum\Enum":private]=>
  string[6] "HEARTS"
}

// もちろんclassなので、これもできる
// __constructの引数は値を指定することでインスタンス生成が可能
$cardsuit =  new Cardsuit[4];
var_dump[$cardsuit];
>>> object[Cardsuit]#5 [2] {
  ["value":protected]=>
  int[4]
  ["key":"MyCLabs\Enum\Enum":private]=>
  string[6] "SPADES"
}

返信を追加

なお2021/11/27に更新

staticメソッド

メソッド用途てきな使い方てきなfrom指定した定数値のインスタンスを生成
存在しない時は例外発生$cardsuit = Cardsuit. từ[3];
$cardsuit = Bộ vest. from[9999]; -> 例外keys定数名の一覧を取得$keys = Cardsuit. keys[];valuesキーが定数名、値がインスタンスの配列を取得$values = Cardsuit. values[];toArrayキーが定数名、値が定数値の配列を取得$array = Cardsuit. toArray[];isValid指定した定数値が存在しているかCardsuit. isValid[1];
áo khoác ngoài. isValid[99]; -> falseisValidKey指定した定数名が存在しているかCardsuit. isValidKey['CÂU LẠC BỘ'];
áo khoác ngoài. isValidKey['AAAA']; -> falseassertValidValue指定した定数値が存在しているか
存在しない時は例外発生Cardsuit. khẳng địnhValidValue[1];
áo khoác ngoài. assertValidValue[99]; -> 例外[UnexpectedValueException]search指定した定数値の定数名を取得Cardsuit. tìm kiếm[1];
áo khoác ngoài. search[99]; -> false__callStatic定数をメソッドとして呼び出す
内部的には
use MyCLabs\Enum\Enum;

class Cardsuit extends Enum
{
    public const CLUBS = 'C';
    public const DIAMONDS = 'D';
    public const HEARTS = 'H';
    public const SPADES = 'S';
}

4がうごくCardsuit. CÂU LẠC BỘ[];

返信

なお2021/11/27に更新

メソッド

メソッド用途てきな使い方てきな__construct指定した定数値のインスタンスを生成
定数値が存在しないときは例外がおきるnew Cardsuit[1];__wakeupunserializeを実行した時にうごく__toString定数値を表示$cardsuit = Cardsuit. KIM CƯƠNG[];
echo $cardsuit; -> 2getValueインスタンスの定数値を取得$cardsuit = Cardsuit. TRÁI TIM[];
$cardsuit->getValue[]; -> 3getKeyインスタンスの定数名を取得$cardsuit = Cardsuit. từ[3];
$cardsuit->getKey[]; -> HEARTSequals同じ定数であるか検証$cardsuit = Cardsuit. SPADES[];
$cardsuit->equals[Cardsuit. SPADES []];
$cardsuit->equals[Cardsuit. DIAMONDS[]]; -> falsejsonSerializejson_encodeでシリアライズするデータを返す
https. //www. php. net/manual/ja/jsonserializable. jsonserialize. php

返信

なお2021/11/27

もちろんクラスなのでメソッドを定義することもできる
動かしていた環境がphp7. 4だったのでmatch式は使えなかった

use MyCLabs\Enum\Enum;

class Cardsuit extends Enum
{
    public const CLUBS = 1;
    public const DIAMONDS = 2;
    public const HEARTS = 3;
    public const SPADES = 4;

    /**
     * 日本語を返す
     */
    public function label[]: string
    {
        switch [$this->value] {
            case self::CLUBS:
                $label = 'クラブ';
                break;
            case self::DIAMONDS:
                $label = 'ダイヤモンド';
                break;
            case self::HEARTS:
                $label = 'ハート';
                break;
            case self::SPADES:
                $label = 'スペード';
                break;
        }
        return $label;
    }
}

foreach [Cardsuit::values[] as $value] {
    var_dump[$value->label[]];
}
>>> string[9] "クラブ"
string[18] "ダイヤモンド"
string[9] "ハート"
string[12] "スペード"

1

なお2021/11/27

php8の環境を用意した

    public function label[]: string
    {
        return match[$this->value] {
            self::CLUBS => 'クラブ',
            self::DIAMONDS => 'ダイヤモンド',
            self::HEARTS => 'ハート',
            self::SPADES => 'スペード',
        };
    }

foreach [Cardsuit::values[] as $value] {
    var_dump[$value->label[]];
}
>>> string[9] "クラブ"
string[18] "ダイヤモンド"
string[9] "ハート"
string[12] "スペード"

返信を追加

なお2021/11/27

ほとんどreadmeに書いてある内容だな
https. //github. com/myclabs/php-enum/blob/master/README. md

返信

なお2022/05/29

この記事を書くためにまとめたのでクローズする
https. //zenn. dev/naopusyu/articles/3721b99e0e30cd

返信

このスクラップは2022/05/29にクローズされました

ログインするとコメントできます

Đăng nhập

ツイート

なお

子育てエンジニア

なお2021/11/26

定義
wikipediaの列挙型の例を使った

use MyCLabs\Enum\Enum;

class Cardsuit extends Enum
{
    public const CLUBS = 1;
    public const DIAMONDS = 2;
    public const HEARTS = 3;
    public const SPADES = 4;
}

1

なお2021/11/27

クラスなのでこういう書き方もできる

use MyCLabs\Enum\Enum;

class Cardsuit extends Enum
{
    public const CLUBS = 'C';
    public const DIAMONDS = 'D';
    public const HEARTS = 'H';
    public const SPADES = 'S';
}

返信を追加

なお2021/11/26

使ってみる

// 定数
echo Cardsuit::CLUBS;
>>> 1

// メソッド
// 内部で__callStatic[]が呼び出されて、インスタンスが返ってくる
$cardsuit =  Cardsuit::DIAMONDS[];
var_dump[$cardsuit];
>>> object[Cardsuit]#3 [2] {
  ["value":protected]=>
  int[2]
  ["key":"MyCLabs\Enum\Enum":private]=>
  string[8] "DIAMONDS"
}

1

なお2021/11/26に更新

こういう使い方もできる

$key = 'HEARTS';
$cardsuit =  Cardsuit::$key[];
var_dump[$cardsuit];
>>> object[Cardsuit]#2 [2] {
  ["value":protected]=>
  int[3]
  ["key":"MyCLabs\Enum\Enum":private]=>
  string[6] "HEARTS"
}

// 値からインスタンス生成が可能
// fromメソッドがいきなり登場
$cardsuit =  Cardsuit::from[3];
var_dump[$cardsuit];
>>> object[Cardsuit]#4 [2] {
  ["value":protected]=>
  int[3]
  ["key":"MyCLabs\Enum\Enum":private]=>
  string[6] "HEARTS"
}

// もちろんclassなので、これもできる
// __constructの引数は値を指定することでインスタンス生成が可能
$cardsuit =  new Cardsuit[4];
var_dump[$cardsuit];
>>> object[Cardsuit]#5 [2] {
  ["value":protected]=>
  int[4]
  ["key":"MyCLabs\Enum\Enum":private]=>
  string[6] "SPADES"
}

返信を追加

なお2021/11/26に更新

こういう使い方もできる

$key = 'HEARTS';
$cardsuit =  Cardsuit::$key[];
var_dump[$cardsuit];
>>> object[Cardsuit]#2 [2] {
  ["value":protected]=>
  int[3]
  ["key":"MyCLabs\Enum\Enum":private]=>
  string[6] "HEARTS"
}

// 値からインスタンス生成が可能
// fromメソッドがいきなり登場
$cardsuit =  Cardsuit::from[3];
var_dump[$cardsuit];
>>> object[Cardsuit]#4 [2] {
  ["value":protected]=>
  int[3]
  ["key":"MyCLabs\Enum\Enum":private]=>
  string[6] "HEARTS"
}

// もちろんclassなので、これもできる
// __constructの引数は値を指定することでインスタンス生成が可能
$cardsuit =  new Cardsuit[4];
var_dump[$cardsuit];
>>> object[Cardsuit]#5 [2] {
  ["value":protected]=>
  int[4]
  ["key":"MyCLabs\Enum\Enum":private]=>
  string[6] "SPADES"
}

なお2021/11/27

もちろんクラスなのでメソッドを定義することもできる
動かしていた環境がphp7. 4だったのでmatch式は使えなかった

use MyCLabs\Enum\Enum;

class Cardsuit extends Enum
{
    public const CLUBS = 1;
    public const DIAMONDS = 2;
    public const HEARTS = 3;
    public const SPADES = 4;

    /**
     * 日本語を返す
     */
    public function label[]: string
    {
        switch [$this->value] {
            case self::CLUBS:
                $label = 'クラブ';
                break;
            case self::DIAMONDS:
                $label = 'ダイヤモンド';
                break;
            case self::HEARTS:
                $label = 'ハート';
                break;
            case self::SPADES:
                $label = 'スペード';
                break;
        }
        return $label;
    }
}

foreach [Cardsuit::values[] as $value] {
    var_dump[$value->label[]];
}
>>> string[9] "クラブ"
string[18] "ダイヤモンド"
string[9] "ハート"
string[12] "スペード"

1

なお2021/11/27

php8の環境を用意した

    public function label[]: string
    {
        return match[$this->value] {
            self::CLUBS => 'クラブ',
            self::DIAMONDS => 'ダイヤモンド',
            self::HEARTS => 'ハート',
            self::SPADES => 'スペード',
        };
    }

foreach [Cardsuit::values[] as $value] {
    var_dump[$value->label[]];
}
>>> string[9] "クラブ"
string[18] "ダイヤモンド"
string[9] "ハート"
string[12] "スペード"

返信を追加

なお2021/11/27

php8の環境を用意した

    public function label[]: string
    {
        return match[$this->value] {
            self::CLUBS => 'クラブ',
            self::DIAMONDS => 'ダイヤモンド',
            self::HEARTS => 'ハート',
            self::SPADES => 'スペード',
        };
    }

foreach [Cardsuit::values[] as $value] {
    var_dump[$value->label[]];
}
>>> string[9] "クラブ"
string[18] "ダイヤモンド"
string[9] "ハート"
string[12] "スペード"

Chủ Đề