EnumかEnum以外か どうやって判断すれば良いんだ………!?とハマったのでメモ。
🌟 結論
Enumかどうかは、「UnitEnumインターフェイスのインスタンスかどうか」で判定する。
if( $hogeEnum instanceof UnitEnum ) {}
このインターフェイスは、型チェックのためだけに存在しています。
と、以下のUnitEnumのページに書かれていますね。
➕ PHPのドキュメントにもコメント載せた(が、消えた)
(なんでEnumの説明ページに書かれていないんだ……!!!!)
ということで、Enumの説明ページの下の方にあるUser Contributed Notesに書いておきました!!
追記
2022/08/22時点で再度ページを確認すると、自分のNotesが削除されてました(なんでかは不明)
💬 ちなみに・・・Enumとオブジェクトの違い
Enumはオブジェクトとして扱われるのでis_object()
はtrue
になります。
$hogeEnum = HogeEnum::FUGA;
$hogeObject = new HogeObject();
is_object($hogeEnum); // true
is_object($hogeObject); // true
$hogeEnum instanceof UnitEnum; //true
$hogeObject instanceof UnitEnum; // false
Enumとオブジェクトとの違いについてはこちらのページに詳しく書かれています。