Closed 2022/05/29にクローズ11
php-enumのメモPHP
このパッケージでできることをただ書き続ける
https. //github. com/myclabs/php-enum
定義
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;
}
クラスなのでこういう書き方もできるuse MyCLabs\Enum\Enum;
class Cardsuit extends Enum
{
public const CLUBS = 'C';
public const DIAMONDS = 'D';
public const HEARTS = 'H';
public const SPADES = 'S';
}
返信を追加
使ってみる// 定数
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"
}
こういう使い方もできる$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"
}
返信を追加
staticメソッド
存在しない時は例外発生$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定数をメソッドとして呼び出す
内部的には
4がうごくCardsuit. CÂU LẠC BỘ[];use MyCLabs\Enum\Enum;
class Cardsuit extends Enum
{
public const CLUBS = 'C';
public const DIAMONDS = 'D';
public const HEARTS = 'H';
public const SPADES = 'S';
}
メソッド
定数値が存在しないときは例外がおきる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
もちろんクラスなのでメソッドを定義することもできる
動かしていた環境が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] "スペード"
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] "スペード"
返信を追加
ほとんどreadmeに書いてある内容だな
https. //github. com/myclabs/php-enum/blob/master/README. md
この記事を書くためにまとめたのでクローズする
https. //zenn. dev/naopusyu/articles/3721b99e0e30cd
このスクラップは2022/05/29にクローズされました
ログインするとコメントできます
Đăng nhập
ツイートなお
子育てエンジニア
定義
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クラスなのでこういう書き方もできるuse MyCLabs\Enum\Enum;
class Cardsuit extends Enum
{
public const CLUBS = 'C';
public const DIAMONDS = 'D';
public const HEARTS = 'H';
public const SPADES = 'S';
}
返信を追加
使ってみる
// 定数
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こういう使い方もできる$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"
}
返信を追加
こういう使い方もできる
$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"
}
もちろんクラスなのでメソッドを定義することもできる
動かしていた環境が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] "スペード"
1php8の環境を用意した 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] "スペード"
返信を追加
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] "スペード"