gettype()
だと判別できないし、is_enum()
関数も無いし、EnumかEnum以外か どうやって判断すれば良いんだ………!?とハマったのでメモ。
🌟 結論
Enumかどうかは、「UnitEnumインターフェイスのインスタンスかどうか」で判定する。
if( $hogeEnum instanceof UnitEnum ) {}
このインターフェイスは、型チェックのためだけに存在しています。
と、以下のUnitEnumのページに書かれていますね。
💬 ちなみに・・・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とオブジェクトとの違いについてはこちらのページに詳しく書かれています。