[PHP-users 11682] Re: コンストラクタ引数にオブジェクトを
KOYAMA Tetsuji
php-users@php.gr.jp
Fri, 22 Nov 2002 02:10:15 +0900
小山です。さらにおまけ。
At Thu, 21 Nov 2002 13:42:37 +0900,
fumiyaKitamura wrote:
> 私は...
> 1.$OBJはポインタを指し示している
> 2. $this->Ref = $OBJ; の代入でポインタが格納される
> のように間違っていました。(^-^)>
年末発売予定の某雑誌原稿より抜粋。(笑)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
●クローン
ZE2でのオブジェクトの代入は、Javaライクに参照渡しがデフォルトになりま
した。つまり
$obj = new MyClass;
$obj2 = $obj;
とすると$objと$obj2は同じオブジェクトを指しています。これは$objへの変
更は$obj2にも反映するということです。従来と同様にオブジェクトをコピー
したいときには__clone()というメソッドを呼びます。
リスト3では、オリジナルの$objオブジェクトから、$obj1は「=」で、$obj2は
「__clone()」で値をコピーしています。その後$objの内容を書き換えると、=
でコピーした$obj1は同様に変更されますが、__clone()でコピーした$obj2は
もとの値のままです。
===リスト3 クローンサンプル===========================================
<?php
class MyClass {
var $var;
};
$obj = new MyClass;
$obj->var = 'hoge';
$obj1 = $obj;
$obj2 = $obj->__clone();
$obj->var = 'fuga';
print $obj1->var; // 'fuga'
print $obj2->var; // 'hoge'
?>
======================================================================
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ということで Zend Engine 2 (PHP 5.0) では、キタムラさんのおそらく望
み通りに、参照渡しがデフォルトになる予定です。
--
小山 哲志@ビート・クラフト
koyama@beatcraft.com
koyama@hoge.org