鱼C论坛

 找回密码
 立即注册
查看: 1447|回复: 5

[庖丁解牛] 0 0 4 1 ● 对象clone(克隆)

[复制链接]
发表于 2018-10-28 09:22:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 不二如是 于 2018-10-28 09:43 编辑

781e332a153198193e966e3ce03ccbc0.jpg


创建了对象后,在作为参数传递数据时通过引用来传递。

进行对象赋值并不是完成地复制对象,通过下面的代码来说明这件事。

我们定义一个非常简单的只有属性name没有方法的User类:
  1. <?php
  2. // 创建对象
  3. $myObject = new User();
  4. $myObject2 = new User();

  5. // 访问对象并赋值
  6. $myObject->name = "小甲鱼";

  7. // 将myObject赋值给myObject2
  8. $myObject2 = $myObject;
  9. $myObject2->name = "不二如是";

  10. // 输出测试
  11. echo "myObject name = ".$myObject->name."<br>";
  12. echo "myObject2 name = ".$myObject2->name;

  13. // 创建User类
  14. class User{
  15.         // 一个参数
  16.         public $name;
  17. }
  18. ?>
复制代码

Snip20181028_33.png


我们创建了对象myObject,其name属性值为“小甲鱼”。

接着又创建了一个myObject2对象,并将myObject值赋值给它,然后又设置name属性值为“不二如是”。

为啥最终结果两个对象的name属性都是“不二如是”呢?

很简单:
游客,如果您要查看本帖隐藏内容请回复


为了避免这种“群体伤害”,可以使用clone操作符。

它创建了类的新实例,并将原实例的属性值赋值给新实例。

简单修改上面的代码:
  1. $myObject2 = $myObject;
复制代码


为:
  1. $myObject2 = clone $myObject;
复制代码


其结果:
Snip20181028_34.png


这就非常友好了不是吗?!





这位鱼油,如果喜欢本系列PHP+MySql+Js帖子,请订阅 专辑&#9758;传送门)(不喜欢更要订阅

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-28 22:22:33 | 显示全部楼层
看一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-6 12:48:36 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-20 15:10:06 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-23 19:15:00 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-12 12:15:24 From FishC Mobile | 显示全部楼层
为啥呢为啥呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 21:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表