PHPの$thisと$thatポインタの使用例


PHP 5では、オブジェクトのクローン時に自動的に呼び出されるメソッドとして、"_clone()メソッドで元のオブジェクトと同じ属性とメソッドを持つオブジェクトを作成します.クローン後に元のオブジェクトの内容を変更するには、_clone()で元の属性とメソッドを書き換えます.「_clone()」メソッドにはパラメータがなく、$thisと$thatの2つのポインタが自動的に含まれます.$thisは複本を指し、$thatは元を指します.具体的な例は次のとおりです.
<?php
class Person {
    //          
    var $name; //     
    var $sex; //     
    var $age; //     
              //                $name、  $sex    $age     
              // function __construct($name="", $sex="",$age="")
    function __construct($name, $sex, $age) {
        $this->name = $name;
        $this->sex = $sex;
        $this->age = $age;
    }
    //           ,        
    function say() {
        echo "     :" . $this->name . "   :" . $this->sex . "      :" . $this
        ->age . "<br>";
    }
    //             ,                ,   __clone()           。
    function __clone() {
        // $this     p2,  $that      p1,        ,        。
        $this->name = "       $that->name";
        // $this->age = 30;
    }
}
$p1 = new Person ( "  ", " ", 20 );
$p2 = clone $p1;
$p1->say ();
$p2->say ();
?>

このPHPプログラムを正常に実行した結果は以下の通りです.
     :     :       :20
     :          :       :20