PHP5を試してみる - instanceof演算子
サンプルは、EXPERIENCEで実際に確認できるようにしてますので、気になる方は見てみてください。
PHP4の時は自前メソッドとして用意していましたが、PHP5からはjavaと同様、演算子として用意されています。
以下のような継承関係
の場合について、以下のようなサンプルを試してみました。
●10.instanceof.php5
<?php
echo phpversion();
?>
<hr>
<?php
interface Interface1 {}
interface Interface2 {}
interface Interface3 {}
class ClassA
{
function __construct()
{
echo "ここはClassA<br>";
}
}
class ClassB extends ClassA implements Interface1
{
function __construct()
{
echo "ここはClassB<br>";
}
}
class ClassC extends ClassB
{
function __construct()
{
echo "ここはClassC<br>";
}
}
class ClassD implements Interface2
{
function __construct()
{
echo "ここはClassD<br>";
}
}
$YESNO = array("not ", "");
$obj = new ClassB();
echo "ClassB is " . get_class($obj) . "<br>";
echo "super class of ClassB is " . get_parent_class($obj) . "<br>";
echo "ClassB is " . $YESNO[$obj instanceOf ClassA] . "an instance of ClassA<br>";
echo "ClassB is " . $YESNO[$obj instanceOf ClassB] . "an instance of ClassB<br>";
echo "ClassB is " . $YESNO[$obj instanceOf ClassC] . "an instance of ClassC<br>";
echo "ClassB is " . $YESNO[$obj instanceOf ClassD] . "an instance of ClassD<br>";
echo "Interface1 is " . $YESNO[$obj instanceOf Interface1] . "implemented by ClassB<br>";
echo "Interface2 is " . $YESNO[$obj instanceOf Interface2] . "implemented by ClassB<br>";
?>
<hr>
<?php
show_source($_SERVER["SCRIPT_FILENAME"]);
?>
●出力結果ここはClassB
ClassB is ClassB
super class of ClassB is ClassA
ClassB is an instance of ClassA
ClassB is an instance of ClassB
ClassB is not an instance of ClassC
ClassB is not an instance of ClassD
Interface1 is implemented by ClassB
Interface2 is not implemented by ClassB
ということで、Class、interfaceのいずれもJavaと同様の結果を返しました。Javaをお使いの方は、違和感無く使えるのではないでしょうか?ん。。。本当にJavaだな、こりゃ。。。
|