仮にクラス 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:
- [PHP]PHP7.0での変更点とアップグレード時の対応
- [PHP]ユーザー定義関数の出力結果を任意の変数に格納する
- [PHP]PDOを使ったMySQLデータベースへの接続と基本操作
- [PHP]var_dump()、print_r()などの内容をファイルに保存する
- [PHP]switch()は通常では厳密に型を比較しない
- [PHP]コンストラクタ内で例外を投げるのは危険?
- [PHP]ページごとの訪問者数を調べるアクセスカウンター
- [PHP]配列から空の要素を取り除いて詰める