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

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

醉折花枝作酒筹
リリース: 2023-03-10 20:00:01
転載
1578 人が閲覧しました

代入する場合、参照代入はエイリアスを取得することと同じであり、一方を変更すると他方にも影響します。 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 までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート