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



last updated
2002/03/09

counter hits
since 1999/11/06


PHP4のクラスとJavaのクラス - クラスの親子関係(instanceof編)

PHP4からオブジェクト指向的な機能・動作が改善されていますが、オブジェクト指向言語であるJavaとどの程度挙動が異なるか、ちょっとずつまとめてみようかと思います。基本的には、PHPマニュアルに記載されていなくて、「どうなるの?」と思ったことを主にやっています。

今回は、「クラスの親子関係(instanceof編)」についてです。

Javaのinstanceofに相当する(正確ではないですが。。。)ものにis_subclass_of関数がありますが、is_subclass_of関数はあくまで「サブクラスかどうか」を返す関数なので、当該オブジェクト自身をis_subclass_ofすると「false」が返ります(Javaの場合はtrue)。

で、(ちょっと無理矢理ですが)基底クラスに以下のようなinstanceOfメソッドを追加して、Javaのinstanceofにしてみました。

●InstanceofTest.php

<?php
class ClassA
{
    function ClassA()
    {
        echo "ClassA<br>";
    }

    function instanceOf($className)
    {
        return is_subclass_of($this, $className) || get_class($this) == strtolower($className);
    }

}
class ClassB extends ClassA
{
    function ClassB()
    {
        echo "ClassB<br>";
    }
}
class ClassC extends ClassB
{
    function ClassC()
    {
        echo "ClassC<br>";
    }
}
class ClassD
{
    function ClassD()
    {
        echo "ClassD<br>";
    }
}

$YESNO = array("not", "");

$obj = new ClassC();
echo "ClassC is " . get_class($obj) . "<br>";
echo "super class of ClassC is " . get_parent_class($obj) . "<br>";
echo "ClassC is " . $YESNO[$obj->instanceOf("ClassA")] . "an instance of ClassA<br>";
echo "ClassC is " . $YESNO[$obj->instanceOf("ClassB")] . "an instance of ClassB<br>";
echo "ClassC is " . $YESNO[$obj->instanceOf("ClassC")] . "an instance of ClassC<br>";
echo "ClassC is " . $YESNO[$obj->instanceOf("ClassD")] . "an instance of ClassD<br>";

?>

●出力結果
ClassC
ClassC is classc
super class of ClassC is classb
ClassC is an instance of ClassA
ClassC is an instance of ClassB
ClassC is an instance of ClassC
ClassC is not an instance of ClassD 


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