3

PHPはデフォルトでオブジェクトを参照で渡すため、次のスクリプトのデモで少し問題が発生しました。

$a = new stdClass();
$a->b = new stdClass();
$a->b->c = 1;

$d = clone $a;

$a->b->c = 10;

print_r($a);
print_r($d);

stdClassのクローンを作成し、それに含まれる可能性のあるオブジェクトのクローンを作成する方法はありますか?__cloneメソッドを使用してこの動作を防ぐことができることは理解していますが、オブジェクトはjson_decodeを介してビルドされています。

4

2 に答える 2

3

受け入れられている方法は、複合オブジェクトをシリアル化および非シリアル化することだと思います

$d = unserialize(serialize($a));
于 2012-12-06T00:00:53.447 に答える
1

すでにJSONを持っているので、JSONから直接すべてのオブジェクトを作成してみませんか

「ディープクローン」(つまり__clone()、オブジェクトにメソッドを追加しないことによる)のもう1つのハッキーな方法は、次のことも行います。

$object_b = unserialize(serialize($object_a));

または、ネストされたstdClassオブジェクトをすべて処理しているため、次のようになります。

$object_b = json_decode(json_encode($object_a));
于 2012-12-06T00:01:33.963 に答える