对象复制与浅复制
<html>
<head>
<meta charset="utf-8">
<title>对象复制与克隆</title>
</head>
<body>
<!-- 代码1 -->
<?php
$a=15;
echo $a."<br>";//输出15
$b=$a;
echo $b."<br>";//输出15
$b=25;
echo $b."<br>";//输出25
echo $a."<br>";//输出15
//可以发现,普通变量是值传递,在不同的内存空间,其中一个改变对于另一个没有影响
?>
<!-- 代码2 -->
<?php
class Student{
private $name;
private $age;
public function setName($name){
$this->name=$name;
return $this;
}
public function setAge($age){
$this->age=$age;
return $this;
}
public function getName(){
return $this->name;
}
public function getAge(){
return $this->age;
}
}
$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
//可以发现类在赋值时,共用的是一段内存,其中一个改变,另外一个也同时改变,相当于起了一个别名
?>
<!-- 代码3 -->
<?php
class Student{
private $name;
private $age;
public function setName($name){
$this->name=$name;
return $this;
}
public function setAge($age){
$this->age=$age;
return $this;
}
public function getName(){
return $this->name;
}
public function getAge(){
return $this->age;
}
}
$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复制后,两个对象的内存不是同一段,其中一个改变,不影响另外一个。
?>
<!-- 代码4 -->
<?php
class Student{
private $name;
private $age;
public function setName($name){
$this->name=$name;
return $this;
}
public function setAge($age){
$this->age=$age;
return $this;
}
public function getName(){
return $this->name;
}
public function getAge(){
return $this->age;
}
public function __clone(){//再上一个代码上面添加此函数
$this->age="";
}
}
$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中进行处理。
?>
</body>
</html>
如需转载,请注明文章出处,谢谢!!!
浙公网安备 33010602011771号