ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[toc] ## 举个例子 > 《闪电侠》里面一个反派叫 Danton Black 的超级人类,拥有复制自身的超能力,能够变身出六个自己 > 程序员就需要这种能力,一个写UI, 一个写前端, 一个写APP, 一个建数据库, 一个写后台, 一个维护服务器... ## 代码示例 ```php <?php // 人 class Person { private $name; private $age; public function __construct($name, $age) { $this->name = $name; $this->age = $age; } public function showMyself() { echo "我是{$this->name}, 年龄{$this->age}" . PHP_EOL; } public function coding() { echo "我是一个码农, 我在用双手改变世界以及我的发际线..." . PHP_EOL; } public function reading() { echo "阅读是我快乐, 我爱阅读胜过爱左手..." . PHP_EOL; } public function fallInLove() { echo "神鬼狐仙, 风月无边..."; } public function copy() { return clone($this); } } // 代码测试 $tony = new Person("Tony", 26); $tony->showMyself(); $tony->coding(); $tony1 = $tony->copy(); $tony1->showMyself(); $tony1->reading(); $tony2 = $tony->copy(); $tony2->showMyself(); $tony2->fallInLove(); ``` ``` D:\soft\php72\php.exe D:\project\php_dp\index.php 我是Tony, 年龄26 我是一个码农, 我在用双手改变世界以及我的发际线... 我是Tony, 年龄26 阅读是我快乐, 我爱阅读胜过爱左手... 我是Tony, 年龄26 神鬼狐仙, 风月无边... Process finished with exit code 0 ``` ## 什么是克隆模式? > 通过拷贝自身的属性来创建一个新对象的过程叫做克隆模式。 > 克隆模式的核心就是一个 Clone 方法,Clone 方法的功能就是拷贝父本的所有属性 > 分配一块新的内存空间给新的对象; 拷贝父本对象的所有属性。 > 深拷贝:赋值时值完全复制,完全的copy,对其中一个作出改变,不会影响另一个 > 浅拷贝:赋值时,引用赋值,相当于取了一个别名。对其中一个修改,会影响另一个 > PHP中, = 赋值时,普通对象是深拷贝,但对对象来说,是浅拷贝。也就是说,对象的赋值是引用赋值。 > php5中,对象的` = `赋值和传递都是引用。要想实现拷贝副本,php提供了`clone`函数实现。 ![](https://box.kancloud.cn/b2634e21f7b00d8bf4cffe0610c08e64_322x284.png) ## 优缺点 **克隆模式的优点** 1.克隆模式是通过内存拷贝的方式进行复制,比 new 的方式创建对象性能更好; 1.通过深拷贝的方式,可以方便地创建一个具有相同属性和行为的另一个对象,特别是对于复杂对象,方便性尤为体现。 **克隆模式的缺点** 1. 通过克隆的方式创建对象,不会执行类的构造函数,这不一定是缺点,但大家使用的时候需要注意这一点。 ## 应用场景 1. 如果创建新对象(如复杂对象)成本较大,我们可以利用已有的对象进行复制来获得。 1. 当类的初始化需要消耗非常多的资源时,如需要消耗很多的数据、硬件等资源。