代入する場合、参照代入はエイリアスを取得することと同じであり、一方を変更すると他方にも影響します。 PHPで値を代入する際、通常のオブジェクトはディープコピーされますが、オブジェクトはシャローコピーされます。言い換えれば、オブジェクトの割り当ては参照割り当てです。以下に PHP オブジェクトのシャローコピーを紹介しますので、必要に応じて参照してください。
先週、低レベルのバグに遭遇しましたが、長い間問題を見つけることができませんでした。今日、ピットでしゃがんでいたとき、私は知りませんでしたなぜこのバグが頭に浮かんだのか、そして突然気づきました。オブジェクトが複製されていないことが原因であるかどうかを確認してください。
案の定、問題は、同じlaravelコレクションを複数回走査すると、同じオブジェクトのプロパティが繰り返し操作され、後続の操作で前の操作が上書きされるため、最終結果が返されるときのみ最後の操作の結果。
浅いコピー
$copy_of_object = clone $object;
テストをしてみましょう
<?php class City { public $name; } $c1 = new City; $c1->name = "烟台"; echo $c1->name; // 烟台 echo PHP_EOL; $c2 = $c1; echo $c2->name; // 烟台 echo PHP_EOL; $c1->name = "威海"; echo $c2->name; // 威海 echo PHP_EOL; $c3 = clone $c1; echo $c3->name; // 威海 echo PHP_EOL; $c1->name = "青岛"; echo $c3->name; // 威海 echo PHP_EOL;
テスト結果
php /tmp/test.php 烟台 烟台 威海 威海 威海
なぜ浅いコピーと呼ばれるのでしょうか?
該当するのはディープコピーです。浅いコピーの場合、オブジェクトの属性が依然としてオブジェクトである場合、属性は依然として同じオブジェクトを指すためです。
推奨学習: php ビデオ チュートリアル
以上がPHP オブジェクトをシャローコピーする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。