zoukankan      html  css  js  c++  java
  • 对象复制与浅复制

    <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>
    
  • 相关阅读:
    当你输入一个网址的时候,实际会发生什么?
    HTTP响应报文与工作原理详解
    DNS系统的解析原理
    spark-streaming集成Kafka处理实时数据
    python分布式环境下的限流器
    使用spark与MySQL进行数据交互的方法
    Linux Redis集群搭建与集群客户端实现
    commons-pool与commons-pool2连接池(Hadoop连接池)
    Kazoo Python Zookeeper 选主
    SpringMVC拦截器Interceptor
  • 原文地址:https://www.cnblogs.com/-beyond/p/5695454.html
Copyright © 2011-2022 走看看