• 对象复制与浅复制


    <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>
    
  • 相关阅读:
    keras与卷积神经网络(CNN)实现识别mnist手写数字
    Pytorch自动求解梯度
    Kaggle竞赛入门(四):随机森林算法的Python实现
    Kaggle竞赛入门(三):用Python处理过拟合和欠拟合,得到最佳模型
    Kaggle竞赛入门(二):如何验证机器学习模型
    Kaggle竞赛入门(一):决策树算法的Python实现
    R语言入门:正态分布中dnorm(),pnorm(),qnorm(),和rnorm()函数的使用
    初识suse-Linux相关!
    关于visio 2007导入独立图库
    让windows 2003启动后直接进入桌面
  • 原文地址:https://www.cnblogs.com/-beyond/p/5695454.html
Copyright © 2020-2023  润新知