PHP写时复制, 变量复制和对象复制不同!!!
2016-03-18 15:14
706 查看
2016年3月18日 15:09:28 星期五
一直以为PHP对象也是写时复制.......
其实:
PHP的变量是写时复制, 对象是引用的
写时复制: $a = $b; 如果$b的内容不改变, $a和$b指向同一块内存; 如果$b内容改变了, $a的内容是不会改变的, 而是为$b重新申请空间存放数据
但是!!!对象 $objTest1 = $objTest2; 这样写, 如果$objTest1或者$objTest2任何一个变了都会影响到对方
测试代码如下
解决办法就是, 使用的时候重新new 或者在类里边实现__clone()方法
另外: 放在数组里的对象也是全程引用的
一直以为PHP对象也是写时复制.......
其实:
PHP的变量是写时复制, 对象是引用的
写时复制: $a = $b; 如果$b的内容不改变, $a和$b指向同一块内存; 如果$b内容改变了, $a的内容是不会改变的, 而是为$b重新申请空间存放数据
但是!!!对象 $objTest1 = $objTest2; 这样写, 如果$objTest1或者$objTest2任何一个变了都会影响到对方
测试代码如下
<?php echo '<pre>'; //////变量复制测试 $a = 123; $b = $a; $b = 234; var_dump($a, $b); //int(123) int(234) //////对象复制测试 Class Test { public $t = 123; public $tt = 234; } $objTest1 = new Test(); $objTest2 = $objTest1; $objTest2->t = 'objTest2'; var_dump($objTest1->t, $objTest2->t); // string(objTest2), sting(objTest2) $objTest3 = new Test(); //重新new, 而不是赋值 $objTest3->tt = 'objTest3'; var_dump($objTest1->tt, $objTest3->tt); // int(234), sting(objTest3)
解决办法就是, 使用的时候重新new 或者在类里边实现__clone()方法
另外: 放在数组里的对象也是全程引用的
相关文章推荐
- php dom xml增删改查crud
- ftp自动下载脚本
- PHP的Yii框架中行为的定义与绑定方法讲解
- phpstorm学习
- php pdo连接报错Connection failed: SQLST
- 处理PHP的JSON中文编码问题
- 第九天 ContentProvider(内容提供者、接受者)
- GetPrivateProfileString和WritePrivateProfileString头文件引入的注意点
- 详解在PHP的Yii框架中使用行为Behaviors的方法
- php实现一个简单的四则运算计算器
- WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
- PHP 调用系统命令 超时
- ftp安装配置
- 学习php最简单的验证码制作
- ubuntu下vsftpd个人配置
- 长见识了,php生成唯一串(算上两括号38位)
- php5.6 64位win7 curl init 解决方法
- 深入讲解PHP的Yii框架中的属性(Property)
- vsftpd: refusing to run with writable root inside chroot
- PHP Mail