ホームページ  >  記事  >  バックエンド開発  >  PHP オブジェクトをシャローコピーする方法

PHP オブジェクトをシャローコピーする方法

醉折花枝作酒筹
醉折花枝作酒筹転載
2021-06-23 16:08:131480ブラウズ

代入する場合、参照代入はエイリアスを取得することと同じであり、一方を変更すると他方にも影響します。 PHPで値を代入する際、通常のオブジェクトはディープコピーされますが、オブジェクトはシャローコピーされます。言い換えれば、オブジェクトの割り当ては参照割り当てです。以下に 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 サイトの他の関連記事を参照してください。

声明:
この記事はsunzhongwei.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。