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>
    
  • 相关阅读:
    QTP模拟鼠标和键盘事件整理
    Linux 入门常用命令 — 改变文件或目录的访问权限
    做一个有品质的男人
    Linux下.tar .gz .tgz .bz2 .bz等解、压包命令详解
    全面整理CentOS系统使用中文
    MSDN宝藏库中,初学者应该看的东西【整理的很辛苦哦】
    IIS 7.5版本中一些诡异问题的解决方案
    老生常谈ASP.NET中的Cookies,罗列读写Cookies的方法
    分享3段平时很实用的微代码,高手莫喷
    SQL 2005中的临时表
  • 原文地址:https://www.cnblogs.com/-beyond/p/5695454.html
Copyright © 2011-2022 走看看