首頁  >  文章  >  後端開發  >  PHP物件如何進行淺複製

PHP物件如何進行淺複製

醉折花枝作酒筹
醉折花枝作酒筹轉載
2021-06-23 16:08:131495瀏覽

賦值時,引用賦值相當於取了一個別名;對其中一個修改會影響另一個。 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刪除