博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP写时复制, 变量复制和对象复制不同!!!
阅读量:5261 次
发布时间:2019-06-14

本文共 824 字,大约阅读时间需要 2 分钟。

2016年3月18日 15:09:28 星期五

一直以为PHP对象也是写时复制.......

其实: 

PHP的变量是写时复制, 对象是引用的

写时复制: $a = $b; 如果$b的内容不改变, $a和$b指向同一块内存; 如果$b内容改变了, $a的内容是不会改变的, 而是为$b重新申请空间存放数据

但是!!!对象 $objTest1 = $objTest2; 这样写, 如果$objTest1或者$objTest2任何一个变了都会影响到对方

测试代码如下

1 
'; 3 //变量复制测试 4 $a = 123; 5 $b = $a; 6 $b = 234; 7 8 var_dump($a, $b); //int(123) int(234) 9 //对象复制测试10 Class Test11 {12 public $t = 123;13 public $tt = 234;14 }15 16 $objTest1 = new Test();17 $objTest2 = $objTest1;18 $objTest2->t = 'objTest2';19 var_dump($objTest1->t, $objTest2->t); // string(objTest2), sting(objTest2)20 21 $objTest3 = new Test(); //重新new, 而不是赋值22 $objTest3->tt = 'objTest3';23 var_dump($objTest1->tt, $objTest3->tt); // int(234), sting(objTest3)

解决办法就是, 使用的时候重新new 或者在类里边实现__clone()方法

 

另外: 放在数组里的对象也是全程引用的

 

转载于:https://www.cnblogs.com/iLoveMyD/p/5292224.html

你可能感兴趣的文章
Java 中 静态方法与非静态方法的区别
查看>>
echarts饼图显示百分比
查看>>
JMS消息
查看>>
Jenkins+ProGet+Windows Batch搭建全自动的内部包(NuGet)打包和推送及管理平台
查看>>
php上传文件及头像预览
查看>>
大四java实习生的一些经历
查看>>
线程池的概念
查看>>
Oracle_Statspack性能诊断工具
查看>>
转获取sql维护的表关系
查看>>
Java 序列化
查看>>
Java 时间处理实例
查看>>
Java 多线程编程
查看>>
Java 数组实例
查看>>
mysql启动过程
查看>>
2017前端面试题总结
查看>>
Http GetPost网络请求
查看>>
SWIFT国际资金清算系统
查看>>
Sping注解:注解和含义
查看>>
站立会议第四天
查看>>
如何快速掌握一门技术
查看>>