《深入php面向对象、模式与实践》读书笔记——Clone
2011-09-01 11:32
357 查看
如果度过java或者其他类的设计模式的书,那么这本书应该读起来很容易。简单记录下书中讲第四章里面的Clone。
所以对对象clone的时候根据情况要注意,尤其是深层次的包含的时候,容易引发错误。
/*********************************************** * @name : clone.php * @since version : 1.0.0 * @date : 2011/9/1 * @email : outman@shibeike.net ***********************************************/ class CloneClassOne { public $cloneClassTwo; public function __construct($cloneClassTwo) { $this->cloneClassTwo = $cloneClassTwo; } # for step: 2 public function __clone() { $this->cloneClassTwo = clone $this->cloneClassTwo; } } class CloneClassTwo { public $cloneClassThree; public function __construct($cloneClassThree) { $this->cloneClassThree = $cloneClassThree; } #for step: 2 public function __clone() { $this->cloneClassThree = clone $this->cloneClassThree; } } class CloneClassThree{ public $vars; public function __construct($vars) { $this->vars = $vars; } } # 初始化 # step: 1 此时不再类里面加入 __clone() 方法 $classOne = new CloneClassOne(new CloneClassTwo(new CloneClassThree(5))); # 将会输出值为 5 echo $classOne->cloneClassTwo->cloneClassThree->vars, '<br>'; # clone $classOne这个对象 $cloneClass = clone $classOne; # 输出clone以后的值5 echo $cloneClass->cloneClassTwo->cloneClassThree->vars; # 改变$classOne的值为6 $classOne->cloneClassTwo->cloneClassThree->vars = 6; # 注意,此时CloneClassOne & CloneClassTwo中没有加入 __clone 方法 # 所以只是浅clone而已,所以此时的值会随着原来类成员对象的改变而改变 # 输出 6 echo $cloneClass->cloneClassTwo->cloneClassThree->vars, '<br>'; # add __clone method in CloneClassTwo & CloneClassOne # step: 2 # change $classOne->vars' value # 此时加入__clone 方法,进行深度克隆 # 改变原来的值,不会影响当前clone出来的对象 $classOne->cloneClassTwo->cloneClassThree->vars = 6; # echo 5 echo $cloneClass->cloneClassTwo->cloneClassThree->vars, '<br>';
所以对对象clone的时候根据情况要注意,尤其是深层次的包含的时候,容易引发错误。
相关文章推荐
- 深入PHP面向对象、模式与实践——让面向对象编程更加灵活的模式(2)
- 《深入PHP面向对象、模式与实践》学习笔记(一)
- 读《深入php面向对象、模式与实践》有感(二)
- 读《深入php面向对象、模式与实践》有感(一)
- 深入PHP:面向对象、模式与实践-读书笔记:对象工具1
- 读《深入php面向对象、模式与实践》有感(二)
- 读《深入php面向对象、模式与实践》有感(一)
- 代码设计(6.1)《深入PHP:面向对象、模式与实践》
- 面向对象设计和过程式编程(6.2)《深入PHP:面向对象、模式与实践》
- 5.3-反射API《深入PHP:面向对象、模式与实践》
- 8.2.2 使用组合 《深入PHP:面向对象、模式与实践》
- 读《深入php面向对象、模式与实践》有感(三)
- 读《深入php面向对象、模式与实践》有感(三)
- 读《深入PHP 面向对象、模式与实践》笔记
- 4.5 延迟静态绑定:static 关键字 《深入PHP:面向对象、模式与实践》
- 连载:面向对象葵花宝典:思想、技巧与实践(38) - 设计模式之道
- 【深入PHP 面向对象】读书笔记(八) - 让面向对象编程更加灵活的模式(一) - 组合模式
- 【深入PHP 面向对象】读书笔记(九) - 让面向对象编程更加灵活的模式(二) - 装饰模式
- 【深入PHP 面向对象】读书笔记(十) - 让面向对象编程更加灵活的模式(三) - 外观模式
- 《敏捷软件开发 原则、模式与实践》的读书笔记