2

PHPで配列とオブジェクトを使用した奇妙な動作が発生しましたが、理解できません。多分あなたたちはそれで私を助けることができます。

配列を作成し、それを別の配列にコピーし、2番目の配列の値を変更すると、すべてが期待どおりになります。

$array1['john']['name'] = 'foo';
$array2 = $array1;
$array2['john']['name'] = 'bar';

echo $array1['john']['name']; // foo
echo $array2['john']['name']; // bar

さて、その配列内のオブジェクトでこれを行うと、コピーされた配列内のオブジェクトはある種の参照を保持しますか?

$array3['john']->name = 'foo';
$array4 = $array3;
$array4['john']->name = 'bar';

echo $array3['john']->name; // bar
echo $array4['john']->name; // bar

最初の例と同じ動作を期待していましたが、phpドキュメントでこれについて何も見つかりません。誰かが私にそれを説明したり、これが文書化されている場所へのリンクを送ったりできますか?

ありがとう!

4

3 に答える 3

4

デフォルトでは、オブジェクトは参照によって渡されます。スカラー値または配列を他の変数に割り当てると、クローンが作成されます。オブジェクトを割り当てると、参照のみがコピーされ、オブジェクトはコピーされません。

すでに作成されているクラスのインスタンスを新しい変数に割り当てると、新しい変数は、割り当てられたオブジェクトと同じインスタンスにアクセスします。この動作は、インスタンスを関数に渡す場合と同じです。作成済みのオブジェクトのコピーは、クローンを作成することで作成できます。

http://php.net/manual/en/language.oop5.basic.phpから

したがって、clone別のオブジェクトが必要な場合は呼び出す必要があります。

$array4['john'] = clone $array3['john'];
于 2013-01-05T13:08:02.780 に答える
0

オブジェクトはphp5で参照によって渡されますが(通常はオブジェクトを渡す方法です)、配列は渡されません。

クローンhttp://php.net/manual/en/language.oop5.cloning.phpを使用します

-編集が遅すぎます:-)-

于 2013-01-05T13:08:24.807 に答える
0

cloneオブジェクトを操作したいを使用してみてください。

オブジェクトが配列にあるときに、誰かがそのための関数を作成しました。

ここにリンク

于 2013-01-05T13:09:10.630 に答える