型演算子
instanceof
を使用して、
ある PHP 変数が特定の
クラス
のオブジェクトのインスタンスであるかどうかを調べます。
例1 クラスでの instanceof
の使用法
<?phpclass MyClass{}class NotMyClass{}$a = new MyClass;var_dump($a instanceof MyClass);var_dump($a instanceof NotMyClass);?>
上の例の出力は以下となります。
bool(true) bool(false)
instanceof
は、ある変数が
特定の親クラスを継承したクラスのオブジェクトのインスタンスであるかどうかを調べることもできます。
例2 継承したクラスでの instanceof
の使用法
<?phpclass ParentClass{}class MyClass extends ParentClass{}$a = new MyClass;var_dump($a instanceof MyClass);var_dump($a instanceof ParentClass);?>
上の例の出力は以下となります。
bool(true) bool(true)
あるオブジェクトが特定のクラスのインスタンスで ない
ことを調べるには、
論理 否定
演算子
を使用します。
例3 instanceof
を使用して、オブジェクトがクラスのインスタンスで ない
かどうかを調べる方法
<?phpclass MyClass{}$a = new MyClass;var_dump(!($a instanceof stdClass));?>
上の例の出力は以下となります。
bool(true)
最後に、instanceof
は、ある変数が特定の
インターフェイス
を実装したクラスのオブジェクトのインスタンスであるかどうかも調べることができます。
例4 インターフェイスでの instanceof
の使用法
<?phpinterface MyInterface{}class MyClass implements MyInterface{}$a = new MyClass;var_dump($a instanceof MyClass);var_dump($a instanceof MyInterface);?>
上の例の出力は以下となります。
bool(true) bool(true)
通常、instanceof
ではリテラルのクラス名を使用しますが、
別のオブジェクトや文字列変数を使用することもできます。
例5 変数を用いた instanceof
の使用法
<?phpinterface MyInterface{}class MyClass implements MyInterface{}$a = new MyClass;$b = new MyClass;$c = 'MyClass';$d = 'NotMyClass';var_dump($a instanceof $b); // $b MyClass クラスのオブジェクトですvar_dump($a instanceof $c); // $c は文字列 'MyClass' ですvar_dump($a instanceof $d); // $d は文字列 'NotMyClass' です?>
上の例の出力は以下となります。
bool(true) bool(true) bool(false)
instanceof は、もし確かめる変数がオブジェクトでなくてもエラーになりません。単に
false
を返すだけです。ただし、PHP 7.3.0 以前では、定数を調べることはできませんでした。
例6 instanceof
での他の変数の調べかた
<?php$a = 1;$b = NULL;$c = imagecreate(5, 5);var_dump($a instanceof stdClass); // $a は配列ですvar_dump($b instanceof stdClass); // $b は NULL ですvar_dump($c instanceof stdClass); // $c はリソースですvar_dump(FALSE instanceof stdClass);?>
上の例の出力は以下となります。
bool(false) bool(false) bool(false) PHP Fatal error: instanceof expects an object instance, constant given
PHP 7.3.0 以降では、
instanceof
の左辺値に定数を指定できるようになりました。
例7 instanceof
を使って定数を確認する
<?phpvar_dump(FALSE instanceof stdClass);?>
上の例の PHP 7.3 での出力は、このようになります。
bool(false)
instanceof
演算子は、is_a()
関数とは機能的に異なる部分があります。