PHP写时复制, 变量复制和对象复制不同!!!

简介: 2016年3月18日 15:09:28 星期五 一直以为PHP对象也是写时复制....... 其实:  PHP的变量是写时复制, 对象是引用的 写时复制: $a = $b; 如果$b的内容不改变, $a和$b指向同一块内存; 如果$b内容改变了, $a的内容是不会改变的, 而是为$b重新申请...

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

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

其实: 

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

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

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

测试代码如下

 1 <?php
 2 echo '<pre>';
 3 //////变量复制测试
 4 $a = 123;
 5 $b = $a;
 6 $b = 234;
 7 
 8 var_dump($a, $b); //int(123) int(234)
 9 //////对象复制测试
10 Class Test
11 {
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()方法

 

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

 

Finger PHP 框架

目录
相关文章
|
1月前
|
Java 程序员 PHP
PHP对象和类
PHP对象和类
21 0
|
7月前
|
PHP
PHP 变量
PHP 变量
20 0
|
1月前
|
存储 数据处理 PHP
PHP变量类型
PHP变量类型
18 0
|
6月前
|
SQL 安全 PHP
理解php对象注入
php对象注入是一个非常常见的漏洞,这个类型的漏洞虽然有些难以利用,但仍旧非常危险,为了理解这个漏洞,请读者具备基础的php知识。
php案例:自己写个数组转换成对象 对象转换成数组的的功能出来吧
php案例:自己写个数组转换成对象 对象转换成数组的的功能出来吧
php案例:自己写个数组转换成对象 对象转换成数组的的功能出来吧
|
3月前
|
JSON PHP 数据格式
|
9月前
|
存储 JSON PHP
在 PHP 中从 URL 获取 JSON 对象
在 PHP 中从 URL 获取 JSON 对象