思考:对象只能通过实例化产生,而且即便是将对象复制给变量,得到的还是同一个对象,如果有的时候需要得到新的对象,除了实例化之外还有其他办法?

引入:对象理论上应该通过实例化来产生,这是对象产生的根本,但是有时候如果想在已有的对象上产生一个新的对象,可以通过克隆来实现。

对象克隆

定义:克隆对象clone,即通过已有的对象复制一个新的同样对象,但是两者之间并非用一个对象。

1.对象克隆是通过clone关键字实现,即clone 对象

class student{

public $name;

public $age=32;

}

//实例化

$s1=new student();

echo $s1->age; //输出32

//clone

$s2= clone $s1;

echo $s2->age; //返回32

echo '


';

//新对象age属性重新赋值

$s2->age=77;

echo $s1->age; //32

echo $s2->age; //77 并不是同一个对象。

?>

2.对象在实例化的时候会自动调用存在的构造方法__construct(),同样的,在类的内部,php允许定义一个__clone的方法,在对象被克隆后,新克隆出来的对象会自动调用

class student{

public $name;

public $age=32;

public function __clone(){

var_dump($this);

$this->age++;

}

}

$s1=new student();

$s2=clone $s1;

echo $s2->age; //输出33 并且var_dump()也输出了

?>

3.如果不允许对象被克隆,可以将__clone()方法私有化(本质四不允许对象在外部被克隆)

class student{

public $name;

public $age=32;

//私有化,表示不允许该对象在外部克隆

private function __clone(){

}

}

?>

总结:

1.对象可以通过克隆来得到新的对象(以前只能实例化)

2.克隆出来的对象会自动调用类中对应的__clone()方法(如果有该方法的话)

3.可以通过私有化来实现禁止外部对象克隆

标签:克隆,对象,s2,age,echo,php,clone

来源: https://www.cnblogs.com/xiaowie/p/12235711.html

php多克,php对象克隆相关推荐

  1. Java提升篇:对象克隆(复制)

    引论 假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,sho ...

  2. Java提高—对象克隆(复制)/对象属性拷贝

    对象克隆(复制)假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byt ...

  3. Java进阶之对象克隆(复制)

    转载自   Java进阶之对象克隆(复制) 假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(bo ...

  4. JAVA进阶—注解,对象克隆,设计模式

    目录 注解 什么是注解 内置注解 元注解 重点掌握 自定义注解 对象克隆 为什么要克隆? 如何实现克隆 解决多层克隆问题 Java 设计模式(java design patterns) 设计模式概念 ...

  5. java中stu是啥,Java 面试:对象克隆

    原标题:Java 面试:对象克隆 转自:博客园,作者:萌小Q 链接:www.cnblogs.com/Qian123/p/5710533.html#_labelTop 假如说你想复制一个简单变量.很简单 ...

  6. Java提高篇——对象克隆

    Java提高篇--对象克隆(复制) 阅读目录 为什么要克隆? 如何实现克隆 浅克隆和深克隆 解决多层克隆问题 总结 假如说你想复制一个简单变量.很简单: int apples = 5; int pea ...

  7. 对象克隆-深拷贝,浅拷贝,直接赋值

    1背景分析 在 Java 开发中,对象拷贝或者说对象克隆是常有的事,对象克隆最终都离不开直接赋值.浅拷贝.深拷贝 这三种方式,我们常用的对象的转化方式,使用的是spring的 BeanUtils.co ...

  8. Java学习总结:34(对象克隆)

    对象克隆 对象克隆就是对对象的复制操作,在Object类中存在一个clone()方法用于对象的克隆操作.该方法如下: protected Object clone() throws CloneNotS ...

  9. public接口可以被任何一个类实现_一文带你深入Java核心技术:对象克隆+接口与回调,还有这种操作...

    对象克隆 当拷贝一个变量时,原始变量与拷贝变量引用同一个对象,如图6-1所示.这就是说,改变一个变量所引用的对象将会对另一个变量产生影响. Employee original = new Employ ...

  10. java对象序列化克隆_JAVA 对象克隆和序列化

    先用一个例子来说明假克隆吧,也就是用"="之后的效果.. [运行结果]: [运行结果] 姓名:rollen年龄:20 姓名:hello world年龄:100 姓名:hello w ...

最新文章

  1. 鸿蒙系统tee内核,厉害!鸿蒙内核的技术定位,是赶第三代微内核的潮流
  2. linux平台下防火墙iptables原理(转)
  3. failed due to the following error: 80070005 错误解决方案
  4. linux:系统对open files的限制
  5. Vue-router VUE路由系统
  6. HDU4417 Super Mario 主席树
  7. Flink编程入门(二)
  8. Easyui动态加载后台数据的例子
  9. 解决人工智能PCA算法输出不稳定的方案
  10. STM8单片机ADC连续扫描模式
  11. FindBugs-IDEA图标说明
  12. 福气太薄,刚积攒了点又被自己扔了
  13. Android自带语音播报TextToSpeech功能开发记录
  14. 《迅雷链精品课》第九课:区块链 P2P 网络
  15. 1年工作经验的C++程序员,感悟分享
  16. AcWing 1129 热浪
  17. 2 路 FULL Cameralink 视觉检测 BOX
  18. Windows Presentation Foundation 巡游
  19. LeetCode(49)Anagram
  20. phpEnv-专业优雅强大的php集成环境

热门文章

  1. python中关于深嵌元组转列表的小问题
  2. win10电脑显示无法自动修复此计算机,win10系统无法自动修复此计算机的操作步骤...
  3. Raki的读paper小记:Model Zoo: A Growing “Brain” That Learns Continually
  4. [HEOI2015]定价 (贪心)
  5. PL/SQL Developer使用技巧、快捷键(转发)
  6. VUE2.0 测试环境配置
  7. CentOS 下安装maven3.04
  8. [导入]Reporting Services 6: 在服务器端报表中筛选数据
  9. java中Field中的方法,解析Java中的Field类和Method类
  10. Mysql-DML操作