[PHP]インスタンスが特定クラスのオブジェクトであるか調べる(型演算子)

Pocket

仮にクラス Foo と Bar があったとして、インスタンスがどちらのクラスオブジェクトであるかを判定して処理を分けたい場合、instanceof を使うことによって型を比較することができます。

下記サンプルでは関数 sample() にクラス Bar か Foo を渡すと、それぞれに合わせた処理をして返すというものです。

<?php
class Foo {}
class Bar {}

function sample($obj){
	if($obj instanceof Foo){
		return "foo";
	} else if($obj instanceof Bar){
		return "bar";
	} else {
		return "";
	}
}

$foo = new Foo();
$bar = new Bar();
echo sample($bar);

出力結果:

bar

$foo を渡した場合は「foo」という文字列が返ります。
instanceof で判定できるのはクラスオブジェクトのみで、string、array、null、bool などと比較することはできません。
将来的に String クラスなどが実装されれば is_string() 等の代わりになるかもしれませんが、現状(執筆時の最新は PHP 5.6)ではまだのようですね。

instanceof は、2つのインスタンスが同じクラスであるかどうかを調べるためにも使えます。
また、クラス名としてリテラル(文字列)の変数を使うこともできます。

$bar1 = new Bar();
$bar2 = new Bar();

var_dump($bar1 instanceof $bar2); // TRUE

$str = 'Bar';
var_dump($bar1 instanceof $str); // TRUE

インターフェイスなどを実装しているかを調べるためにも instanceof が使用できます。

<?php
interface SampleInterface {}
class Foo implements SampleInterface{}

$foo = new Foo();
var_dump( $foo instanceof SampleInterface ); // TRUE

Similar Posts:




コメントを残す

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