php 克隆对象,php中对象的复制与克隆

* 对象的复制与克隆

* 1.默认情况下,对象是引用传递(实际上是对象标识符的复制,后面会详细说)

* 2.也就是说二个对象变量实际上是引用的是同一个对象

* 3.如果要创建一个新的对象,必须使用clone关键字来克隆当前对象

* 4.当使用clone关键字时,如果类中有__clone()会自动调用

* 5.__clone()方法运行在新创建的对象上面

* 6.__clone()方法能控制我们复制什么,以及克隆时要完成的基本操作class Member

{

//声明三个私有属性

private $name; //会员名

private $email; //会员邮箱

private $score; //会员积分

//构造方法

public function __construct($name='',$email='',$score=0)

{

$this->name = $name;

$this->email = $email;

$this->score = $score;

}

//查询器(暂时省略访问控制)

public function __get($name)

{

return $this->$name;

}

//设置器(暂时省略访问控制)

public function __set($name,$value)

{

$this->$name = $value;

}

//克隆魔术方法在对象克隆时自动调用,针对新对象进行初始化操作

public function __clone()

{

$this->score = 0;

}

}

//实例化会员类Member,创建会员对象$member$member = new Member('peter','peter@php.cn',1000);

//访问测试echo $member->score;

//复制会员对象$member1 = $member;

//使用新变量名$member1来更新对象信息$member1->score = 2000;

//用新对象变量名$member1访问echo $member1->score;

echo '


';

//用原对象对象名$member访问echo $member->score;

* 结论:

* 1.新变量修改的结果反映到了原对象变量中

* 2.说明这二个变量,实际上指向的是同一个对象

* 3.也就是对象默认是引用传递

* 4.或者说,第二个变量名$member1只是原变量的别名,并没创建新对象

* 5.可以理解为仅仅是将原对象的标识符,重新起了一个新名称罢了var_dump($member1); //对象id=1

var_dump($member); //对象id=1

//说明$member1和$member是二个完全一样的对象,仅仅是名称不同罢了

//如果想完全创建一个全新的对象应该如何做呢?需要使用关键字:clone$member2 = clone $member;

//我们先查看一下对象变量$member2的score属性值echo $member2->score; //目前是原始值2000

//修改score值$member2->score = 5000;

echo '


';

//再次查看$member2中的scoreecho $member2->score; //新值5000

echo '


';

//大家想一下,我的这种修改,会不会影响到原$member变量的score属性值呢?echo $member->score; //发现原对象的score属性值仍为2000,未发生变化

//这是为什么呢?因为我们使用了克隆技术,创建了二个完全不同的对象变量

//下面进行验证var_dump($member); //变量id是1

var_dump($member2); //变量id是2

//这二个对象变量的id是不同的,说明是二个完全不同的对象

//下面完成这样的一个任务:创建新的会员对象的时候,将该会员的积分清零?应该怎么做?

//在Memeber类中创建一个__clone()克隆魔术方法,对克隆出的新对象进行预处理

//再演示一遍

//查看当前会积分echo $member->score;

//克隆创建一个全新的对象$member3$member3 = clone $member;

//查看新对象$member3的score值,以验证类中的__clone()是否生效?echo '


';

echo $member3->score; //0,说明克隆魔术方法已经生效

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459731.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

贝克汉姆-囚

转载于:https://www.cnblogs.com/andyxl/p/4215954.html

Androida规划nt打包

1.准备工作 (1)首先安装好ant工具 (2)生成keystore 在jdk的bin文件夹下 输入keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore 按操作输入就可以,记住password。 &am…

php5.3+for+linux,Centos 安装 nginx + php5.3

Centos 安装 nginx php5.3,点开查看详情。 #查看系统版本信息cat /etc/issue uname -a#设置时区 rm -rf /etc/localtime ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime#使用ntpdate同步时间 yum install -y ntp ntpdate -u pool.ntp.org date#Centos 安…

PHP Uploadify+jQuery.imgAreaSelect插件+AJAX 实现图片上传裁剪 仿微博头像上传功能

http://blog.csdn.net/as66t/article/details/11688217 http://blog.mc-zone.me/article/226#comment-2991转载于:https://www.cnblogs.com/ymj0906/p/4221967.html

[树结构]平衡二叉树AVL

平衡二叉树是一种二叉排序树,其中每一个节点的左子树和右子树的高度至多等于1,平衡二叉树又称为AVL树。 将二叉树节点的左子树深度减去右子树深度的值称为平衡因子BF,平衡二叉树上所有节点的平衡因子只可能是-1,0或者1。 距离插入点最近的&am…

dedecms php5.4 无法退出后台,PHP5.4版本织梦dedecms后台退出空白的解决方法

你是否遇到过PHP5.4版本织梦dedecms后台退出空白的问题,有没有解决呢?没有解决思绪,就来看看我这篇文章吧。解决办法:打开include/userlogin.class.php找到:function exitUser(){ClearMyAddon();session_unregister($this->ke…

C++构造函数/析构函数 设置成private的原因

C构造函数/析构函数 设置成private的原因 标签(空格分隔): c/c 将构造函数,析构函数声明为私有和保护的,那么对象如何创建? 已经不能从外部调用构造函数了,但是对象必须被构造,应该如…

R语言学习笔记(4)

第四章&#xff1a;基本数据管理 一 贯穿整章的示例 二 变量的创建、重编码和重命名 三 日期值与缺失值 四 数据类型和类型转换 五 数据集的排序、合并与取子集 一 贯穿整章的示例&#xff08;leadership&#xff09; 代码4-1 1 > manager<-c(1,2,3,4,5)2 > date<…

php substr_replace 中文乱码,php substr_replace替换字符串一些实例_PHP教程

substr_replace与str_replace有一点像就是直接把字符串替换一部份了&#xff0c;下面小编来给各位同学介绍一下操作方法。substr_replace() 函数把字符串的一部分替换为另一个字符串。用法substr_replace(string,replacement,start,length)注意当字符串包含中文时&#xff0c;不…

发布《Linux工具快速教程》

发布《Linux工具快速教程》 阶段性的完成了这本书开源书籍&#xff0c;发布出来给有需要的朋友&#xff0c;同时也欢迎更多的朋友加入进来&#xff0c;完善这本书&#xff1b; 本书Github地址&#xff1a;https://github.com/me115/linuxtools_rst 在线阅读 缘起 Linux下有很多…

java6:流程控制

Java 流程控制&#xff1a;顺序分支循环分支&#xff1a;if(布尔表达式){语句块}else{语句块}尽量使用肯定条件&#xff0c;减少else&#xff0c;减少嵌套package day06; import java.util.Scanner; public class Demo01 {public static void main(String[] args) {Scanner con…

linux 部署php svn,Linux服务器搭建svn环境方法详解

下面由Linux教程栏目给大家介绍Linux服务器搭建svn环境的方法&#xff0c;希望对需要的朋友也是帮助&#xff01;1、安装svn服务端sudo apt-get install subversion2、安装svn在ubuntu的本地客户端sudo apt-get install libapache2-svn3、在根目录home下面建一个文件夹svn&…

pfsense 2.2RC版本应用

为什么要上RC版本呢&#xff1f;因为华硕主板有一个RTL8111G驱动在2.15中还没有识别。。。。 公司双线WAN&#xff0c;一个PPPOE一个静态IP。 开了端口转发&#xff0c; 要求对不同的IP进行相关限速&#xff0c; 到达指定网站用固定IP&#xff0c; 两根线带宽均衡使用。 相关设…

我的Android进阶之旅------Android利用温度传感器实现带动画效果的电子温度计

要想实现带动画效果的电子温度计&#xff0c;需要以下几个知识点&#xff1a;1、温度传感器相关知识。2、ScaleAnimation动画相关知识&#xff0c;来进行水印刻度的缩放效果。3、android:layout_weight属性的合理运用&#xff0c;关于android:layout_weight属性的讲解&#xff…

com组件的注册

错误&#xff1a; 检索 COM 类工厂中 CLSID 为 {79AD7B73-C515-40B4-8B02-CB0F5FA5A1A8} 的组件失败&#xff0c;原因是出现以下错误: 80040154 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))。 解决方案&#xff1a; 用regsvr32 dll路径 进行dll的注册。转…

mybatis中的#和$的区别

为什么80%的码农都做不了架构师&#xff1f;>>> 1. #将传入的数据都当成一个字符串&#xff0c;会对自动传入的数据加一个双引号。如&#xff1a;order by #user_id#&#xff0c;如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是…

ecshop pages.lbi.php,关于Ecshop pages.lbi.php Xss漏洞的修复

前段时间在用ecshop建站的时候&#xff0c;360报警说出现了严重的漏洞&#xff1a;Ecshoppages.lbi.phpXss漏洞我是分割线前段时间在用ecshop建站的时候&#xff0c;360报警说出现了严重的漏洞&#xff1a;Ecshop pages.lbi.php Xss漏洞我是分割线描述&#xff1a;目标存在跨站…

php递归操作目录 递归对参数转义

header("Content-type:text/html;charsetutf-8"); //递归读取目录 function reddir($path,$level0) {$dh opendir($path);while(($row readdir($dh)) ! false){if($row . || $row ..)continue;echo str_repeat(&nbsp,$level*6) . $row . <br />;if(is…

MINA2 源代码学习--源代码结构梳理

一、mina总体框架与案例&#xff1a; 1.总体结构图&#xff1a; 简述&#xff1a;以上是一张来自网上比較经典的图&#xff0c;总体上揭示了mina的结构&#xff0c;当中IoService包括clientIoConnector和服务端IoAcceptor两部分。即不管是client还是服务端都是这个结构。IoServ…

matlab水力学工具箱,新浪潮水工设计软件

新浪潮水工设计工具箱是一款强大的水利电力工程设计辅助软件&#xff0c;集合了结构设计、水闸设计、挡土墙设计、地基基础设计、水力学计算、堤防设计及查询工具7个模块的40多个程序&#xff0c;为从事水利电力工程设计用户的设计工作提供了多种便利。主要功能一、结构设计1、…