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 框架

目录
相关文章
|
6月前
|
Java 程序员 PHP
PHP对象和类
PHP对象和类
56 0
|
16天前
|
存储 API PHP
|
1月前
|
缓存 安全 PHP
PHP中的魔术方法与对象序列化
本文将深入探讨PHP中的魔术方法,特别是与对象序列化和反序列化相关的__sleep()和__wakeup()方法。通过实例解析,帮助读者理解如何在实际应用中有效利用这些魔术方法,提高开发效率和代码质量。
|
2月前
|
SQL 关系型数据库 数据库连接
php连接数据库之PDO,PDO的简单使用和预定义占位符的使用以及PDOStatement对象的使用,占位符的不同形式,bindValue和bindParam绑定预定义占位符参数的区别
本文介绍了PHP中PDO(PHP Data Objects)扩展的基本概念和使用方法。内容包括PDO类和PDOStatement类的介绍,PDO的简单使用,预定义占位符的使用方法,以及PDOStatement对象的使用。文章还讨论了绑定预定义占位符参数的不同形式,即bindValue和bindParam的区别。通过具体示例,展示了如何使用PDO进行数据库连接、数据查询、数据插入等操作。
php连接数据库之PDO,PDO的简单使用和预定义占位符的使用以及PDOStatement对象的使用,占位符的不同形式,bindValue和bindParam绑定预定义占位符参数的区别
|
2月前
|
PHP
PHP中如何比较两个对象
PHP中如何比较两个对象
|
2月前
|
PHP
PHP中的面向对象编程:理解类与对象
本文将深入探讨PHP中面向对象编程的核心概念——类与对象。通过实例讲解,帮助读者更好地理解如何在PHP中运用OOP编写更高效、可维护的代码。
42 9
|
3月前
|
PHP 开发者
PHP中的面向对象编程:掌握类与对象的精髓
探索PHP的面向对象编程世界,本文将带你了解如何通过创建和操作类来实例化对象。我们将深入讲解类的声明、构造函数的使用以及继承和多态性的概念。准备好,让我们一起在代码的海洋中航行,揭开PHP对象编程的神秘面纱!
|
5月前
|
JSON 搜索推荐 大数据
Elasticsearch:从 ES|QL 到 PHP 对象
【6月更文挑战第9天】Elasticsearch 是一款强大的开源搜索引擎,适用于大数据处理和分析。在 PHP 开发中,使用 ES|QL 构建复杂查询后,通常需将查询结果转换为 PHP 对象。通过 `json_decode()` 函数解析 JSON 数据,可以实现这一目标。示例代码展示了如何将 Elasticsearch 响应转换为 PHP 对象并遍历数据。这样,我们可以进一步处理和操作数据,适应不同项目需求。随着技术和方法的更新,不断学习和适应将提升我们在开发中的效率和创新力。
92 10
|
5月前
|
安全 前端开发 测试技术
安全开发-PHP应用&模版引用&Smarty渲染&MVC模型&数据联动&RCE安全&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞
安全开发-PHP应用&模版引用&Smarty渲染&MVC模型&数据联动&RCE安全&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞
|
5月前
|
Linux PHP Windows
蓝易云 - php环境变量的配置步骤
以上就是配置PHP环境变量的步骤,希望对你有所帮助。
38 0