PHP物件如何進行淺複製

醉折花枝作酒筹
發布: 2023-03-10 20:00:01
轉載
1547 人瀏覽過

賦值時,引用賦值相當於取了一個別名;對其中一個修改會影響另一個。 PHP中賦值時,普通物件是深拷貝,但對物件來說是淺複製。也就是說,物件的賦值是引用賦值。以下介紹一下php物件的淺複製,有需要的可以參考參考。

PHP物件如何進行淺複製

上週遇到一個低階的bug,半天沒找到問題所在,今天在蹲坑的時候,不知道為何腦子中想起了這個bug, 然後突然意識到是否是因為沒有進行物件clone 造成的。

果然,問題是因為在多次遍歷同一個laravel collection 時,反覆對同一個物件的屬性進行操作,導致後面的操作覆蓋了先前的操作,所以在最終返回結果時,只保留了最後一次的操作結果。

淺複製(shallow copy)

$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中文網其他相關文章!

相關標籤:
來源:sunzhongwei.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板