Php/docs/language.operators.type

提供:Dev Guides
< Php
移動先:案内検索

型演算子

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() 関数とは機能的に異なる部分があります。