2011-01-24 7 views
14

私はstdClassオブジェクトの配列を持っています。変数に1を代入すると、変数をコピーするのではなく、元の変数を参照します。私のコードは次のようなものです:PHPで変数のコピーをどのように明示的に作成しますか?

for ($i = 0, $len = count($rows); $i < $len; $i++) 
{ 
    $row = $rows[$i]; 
    echo $rows[$i]->games; 
    $row->games = 'test'; 
    echo $rows[$i]->games; 
} 

最初のエコーは通常の値を出力しますが、2番目のエコーは "テスト"を出力します。 $row(コピーする必要があります)にプロパティを設定していても、実際には元の配列要素に設定されています。

なぜこれが問題なのですか。実際にコピーを作成すると、コピーを変更してもオリジナルは変更されません。

答えて

37

キーワードはcloneです。注意すべき重要な

$copy = clone $object; 

をオブジェクトが複製された場合、PHP 5は、オブジェクトのすべてのプロパティの簡易コピーを実行します。他の変数への参照であるプロパティはすべて参照のままです。

それは素敵な魔法のメソッドが付属しています:__clone()メソッドが定義されている場合、クローニングは、完了すると、新しく作成されたオブジェクトの__clone()メソッドができるように、呼び出されます、

必要なプロパティを変更する必要があります。

関連する問題