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を試してみる - Private/Protectedなメンバー変数

memoサンプルは、EXPERIENCEで実際に確認できるようにしてますので、気になる方は見てみてください。

PHP4までのクラスは全てpublic扱い(外部関数・クラスから参照可能)でしたが、PHP5からJavaのようなprivate・protectedといった修飾子が使えるようになりますので、ようやく本当の意味での「カプセル化」が出来そうです。

●01.PrivateAndProtectedMembers.php5

<?php
echo phpversion();
?>
<hr>
<?php
class MyClass {
    private $Hello = "Hello, World!\n";
    protected $Bar = "Hello, Bar!\n";
    protected $Foo = "Hello, Foo!\n";

    function printHello() {
        print "MyClass::printHello() " . $this->Hello;
        print "MyClass::printHello() " . $this->Bar;
        print "MyClass::printHello() " . $this->Foo;
    }
}

class MyClass2 extends MyClass {
    protected $Foo;

    function printHello() {
        /* 表示される */
        MyClass::printHello();

        /* Notice:  Undefined property: となる */
        print "MyClass2::printHello() " . $this->Hello;

        /* 表示される */
        print "MyClass2::printHello() " . $this->Bar;

        /**
         * 宣言すると、このクラスのインスタンス変数を
         * 参照してしまうため、表示されない
         */
        print "MyClass2::printHello() " . $this->Foo;
    }
}

$obj = new MyClass();
echo "<pre>";
//print $obj->Hello;  /* Fatal error:  Cannot access private property MyClass::$Hello */
//print $obj->Bar;    /* Fatal error:  Cannot access protected property MyClass::$Bar  */
//print $obj->Foo;    /* Fatal error:  Cannot access protected property MyClass::$Foo */
$obj->printHello(); /* 表示される */
?>
<hr>
<?php
$obj = new MyClass2();
//print $obj->Hello;  /* Notice:  Undefined property:  MyClass2::$Hello */
//print $obj->Bar;    /* Fatal error:  Cannot access protected property MyClass2::$Bar */
//print $obj->Foo;    /* Fatal error:  Cannot access protected property MyClass2::$Foo  */
$obj->printHello();
echo "</pre>";
?>
<hr>
<?php
    show_source($_SERVER["SCRIPT_FILENAME"]);
?>



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