Do You PHP?    
Search Engine Optimization  php5 powerd  Valid XHTML 1.0!  Valid CSS!  このサイトのはてなブックマーク数 



last updated
2004/10/09

counter hits
since 1999/11/06


PHP5を試してみる - instanceof演算子

memoサンプルは、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だな、こりゃ。。。



About This Site |  Privacy Policy |  Contact
Copyright © 1999 - 2004 by Hideyuki SHIMOOKA all rights reserved.