StdClassオブジェクトの配列があります。変数に割り当てると、変数をコピーするのではなく、元の変数を参照します。私のコードは次のようなものです:
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
(コピーする必要があります)に設定していますが、実際には元の配列要素に設定しています。
これはなぜですか。また、コピーを変更しても元のコピーが変更されないように、実際にコピーを作成するにはどうすればよいですか。
clone
キーワードを使用します。
$copy = clone $object;
注意することが重要:
オブジェクトのクローンが作成されると、PHP 5は、オブジェクトのすべてのプロパティの浅いコピーを実行します。他の変数への参照であるプロパティは、参照のままになります。
それは素晴らしい魔法の方法が付属しています:
クローン作成が完了すると、__ clone()メソッドが定義されている場合、新しく作成されたオブジェクトの__clone()メソッドが呼び出され、変更が必要な必要なプロパティを許可します。