LoginSignup
15
4

More than 1 year has passed since last update.

PHP8.1で登場した列挙型(Enum)とオブジェクト(object)を区別する方法

Last updated at Posted at 2022-08-17

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とオブジェクトとの違いについてはこちらのページに詳しく書かれています。

15
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
4