物件複製與淺複製

2022-03-19 01:07:35 字數 2138 閱讀 2447

<?php

$a=15;

echo $a."

";//輸出15

$b=$a;

echo $b."

";//輸出15

$b=25;

echo $b."

";//輸出25

echo $a."

";//輸出15

//可以發現,普通變數是值傳遞,在不同的記憶體空間,其中乙個改變對於另乙個沒有影響

?>

<?php

class student

public function setage($age)

public function getname()

public function getage()

}$stu_1=new student();

$stu_1->setname('jake')->setage(20);

echo $stu_1->getname()." ".$stu_1->getage();//輸出jake 20

$stu_2=$stu_1;//建立乙個物件並賦值

echo $stu_2->getname()." ".$stu_2->getage();//輸出jake 20

$stu_2->setname('peter')->setage(18);

echo $stu_2->getname()." ".$stu_2->getage();//輸出peter 18

echo $stu_1->getname()." ".$stu_1->getage();//輸出peter 18

//可以發現類在賦值時,共用的是一段記憶體,其中乙個改變,另外乙個也同時改變,相當於起了乙個別名

?>

<?php

class student

public function setage($age)

public function getname()

public function getage()

}$stu_1=new student();

$stu_1->setname('jake')->setage(20);

echo $stu_1->getname()." ".$stu_1->getage();//輸出jake 20

$stu_2=clone $stu_1;//建立乙個物件並賦值

echo $stu_2->getname()." ".$stu_1->getage();//輸出jake 20

$stu_2->setname('peter')->setage(18);

echo $stu_2->getname()." ".$stu_2->getage();//輸出peter 18

echo $stu_1->getname()." ".$stu_1->getage();//輸出jake 20

//可以發現,經過clone複製後,兩個物件的記憶體不是同一段,其中乙個改變,不影響另外乙個。

?>

<?php

class student

public function setage($age)

public function getname()

public function getage()

public function __clone()

}$stu_1=new student();

$stu_1->setname('jake')->setage(20);

echo $stu_1->getname()." ".$stu_1->getage();//輸出jake 20

$stu_2=clone $stu_1;//建立乙個物件並賦值

echo $stu_2->getname()." ".$stu_2->getage();//輸出jake (age為空)

$stu_2->setname('peter')->setage(18);

echo $stu_2->getname()." ".$stu_2->getage();//輸出peter 18

echo $stu_1->getname()." ".$stu_1->getage();//輸出jake 20

//__clone()函式是為了進行"淺複製",將一些不需要複製的內容在__clone中進行處理。

?>

淺複製與深層複製

一般情況下像c語言的複製語句,會將是對乙個物件的引用複製 例子 a 3 b a 這個例子將a指向記憶體內容為3的,然後後面的賦值語句,只是再一次將b指向了a所指向的 這是對副本進行操作不影響原來物件,但如果對原來物件進行操作,會對副本進行影響 利用歸檔進行深層複製 data nskeyedarchi...

淺複製與深複製

舉個複製 的例子 function clone p,s for var prop in p return s var a var b clone a,b b.hobby 1 reading b.hobby 1 reading c.hobby 1 reading 由上面的例子可以看出,當執行淺複製時,...

深複製與淺複製

2者主要區別 是否為成員變數分配新記憶體空間 複製建構函式有2種 深複製與淺複製 當將乙個物件a複製給另乙個物件b時,系統會呼叫複製建構函式 編譯器預設的複製建構函式是淺拷貝,它將原物件的每乙個成員變數複製到新物件的成員變數中去。因而最後兩個物件的變數均指向相同的資料成員的記憶體位址。當資料成員中沒...