PHP – クラスの確認

概要

  • instanceof:値のクラスをチェック
  • is_a():値のクラスをチェック
  • is_subclass_of():値の親クラスをチェック
  • class_uses():トレイトを使っているかどうかチェック

instanceof/is_a()

instanceof

インスタンス instanceof クラス等名

instanceofは、第1オペランドが第2オペランドのクラスに合致しているかどうかをチェックする演算子。第2オペランドにはクラス名などをそのまま記述する。is_a()関数と同じ機能。

以下の例の様に、instanceofは、

  • そのインスタンスのクラス、継承した親クラス、インプリメントしたインターフェイスに対して真となる
  • トレイトについてはuseしていても真とはならない

is_a()

is_a(インスタンス, 'クラス等名');

is_a()は第1引数のインスタンスが第2引数のクラスに合致しているかどうかチェックする。第2引数のクラス名は文字列として与える。

以下の例のように、親クラス、インターフェイス、トレイトに対する判定はinstanceofと同じ。

is_subclass_of()

is_subclass_of(インスタンス, 'クラス等名');

is_subclass_of()は、第1引数のインスタンスのクラスが第2引数のクラスを継承しているかどうかをチェックする。引数の渡し方はis_a()と同じ。

以下の例のように、

  • 引数のインスタンスのクラスそのものは偽
  • 継承した親クラスとインターフェースに対しては真
  • トレイトは偽

class_uses()

class_uses(インスタンス);

class_uses()は、引数インスタンスのクラスがuseしているトレイト連想配列として返す。連想配列のキー・値とも、トレイト名の文字列。

トレイトをuseしているかどうかをチェックするには、class_uses()の結果の連想配列に対して、in_array()array_key_exists()でトレイト名が含まれるかどうかをチェック。

親クラスでトレイトをuseしていても、子クラスのclass_uses()では捕捉されない。

method_exists()/property_exists()

method_exists(インスタンス, ’クラス等名’)
property_exists(インスタンス, ’クラス等名’)

method_exists()は、第1引数で指定したインスタンスのクラスに第2引数で指定したメソッドが定義されているかどうかをチェックする。同様に、property_exists()はプロパティーが定義されているかどうかをチェックする。

以下の例で、method_exists()について確認する。

  • 指定したメソッドが定義されていればtrue、定義されていなければfalse
  • 親クラスのメソッドでも存在する(true)と判定(publicprivateに関わらない)
  • トレイトのメソッドも存在すると判定
  • 親クラスでuseされたトレイトのメソッドは、子クラスでも存在すると判定

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です