PHP变量内存分配问题记录整理


Posted in PHP onNovember 27, 2013

今天碰到一个关于php变量内存分配的问题,记录一下。

如下这段代码:

$a = array ( 
'str' => 1, 
'child' => 2 
); $b = $a; 
$b['child'] = $a; 
$b['child']['str'] = 2; 
echo $b['str']; 
$b = null; 
echo $a['str'];

会输出什么呢,结果是11,$b=$a的时候其实并没有新分配内存,ab是指向的同一个区域,$b['child']=$a时,$b会先copy一份原来$a的内容,然后再修改,也就是说这时候$b和$a指向了不同的区域,再修改$a或者$b的时候都不会互相影响了。

再看这段代码:

class A 
{ 
public $str = ''; 
public $child; 
} $a = new A(); 
$b = $a; 
$a->str = 1; 
$a->child = 2; 
$b->child = $a; 
$b->child->str = 2; 
echo $b->str; 
$b = null; 
echo $a->str;

又会输出什么呢,结果是22,根据实际情况来判断,$b->child=$a的时候,并没有像数组那样,重新copy一份,ab以及a->child都是指向的同一片区域,这样改任何一个,其余几个都会被改掉。

可是PHP为啥要设计成这样呢。

PHP 相关文章推荐
中篇:安装及配置PHP
Dec 13 PHP
PHP判断远程图片或文件是否存在的实现代码
Feb 20 PHP
PHP实现的交通银行网银在线支付接口ECSHOP插件和使用例子
May 10 PHP
CentOS6.5 编译安装lnmp环境
Dec 21 PHP
php截取中文字符串函数实例
Feb 23 PHP
PHP中把对象转换为关联数组代码分享
Apr 09 PHP
php强制用户转向www域名的方法
Jun 19 PHP
PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
Dec 24 PHP
Yii框架使用魔术方法实现跨文件调用功能示例
May 20 PHP
thinkPHP框架实现的简单计算器示例
Dec 07 PHP
PHP进阶学习之Geo的地图定位算法详解
Jun 19 PHP
如何用RabbitMQ和Swoole实现一个异步任务系统
May 29 PHP
php遍历文件夹所有文件子文件夹函数代码
Nov 27 #PHP
PHP根据IP地址获取所在城市具体实现
Nov 27 #PHP
php编写的简单页面跳转功能实现代码
Nov 27 #PHP
关于JSON以及JSON在PHP中的应用技巧
Nov 27 #PHP
XAMPP安装与使用方法详细解析
Nov 27 #PHP
浅析echo(),print(),print_r(),return之间的区别
Nov 27 #PHP
PHP echo,print,printf,sprintf函数之间的区别与用法详解
Nov 27 #PHP
You might like
PHP取得一个类的属性和方法的实现代码
2011/05/22 PHP
PHP 数据结构 算法描述 冒泡排序 bubble sort
2011/07/10 PHP
深入密码加salt原理的分析
2013/06/06 PHP
微信营销平台系统?刮刮乐的开发
2014/06/10 PHP
php实现用于删除整个目录的递归函数
2015/03/16 PHP
PHP用户注册邮件激活账户的实现代码
2017/05/31 PHP
PHP chop()函数讲解
2019/02/11 PHP
javascript 获取url参数和script标签中获取url参数函数代码
2010/01/22 Javascript
jquery $(this).attr $(this).val方法使用介绍
2013/10/08 Javascript
简单的ajax连接库分享(不用jquery的ajax)
2014/01/19 Javascript
jquery each的几种常用的使用方法示例
2014/01/21 Javascript
JS高级调试技巧:捕获和分析 JavaScript Error详解
2014/03/16 Javascript
使用AngularJS实现可伸缩的页面切换的方法
2015/06/19 Javascript
jQuery中的ajax async同步和异步详解
2015/09/29 Javascript
Bootstrap Validator 表单验证
2016/07/25 Javascript
vue双向数据绑定原理探究(附demo)
2017/01/17 Javascript
详解React-Native解决键盘遮挡问题(Keyboard遮挡问题)
2017/07/13 Javascript
js移动端事件基础及常用事件库详解
2017/08/15 Javascript
js 提取某()特殊字符串长度的实例
2017/12/06 Javascript
js实现图片区域可点击大小随意改变(适用移动端)代码实例
2019/09/11 Javascript
JS实现秒杀倒计时特效
2020/01/02 Javascript
python根据距离和时长计算配速示例
2014/02/16 Python
简单谈谈Python中的闭包
2016/11/30 Python
python机器人行走步数问题的解决
2018/01/29 Python
python使用epoll实现服务端的方法
2018/10/16 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
2018/12/22 Python
漂亮的Django Markdown富文本app插件的实现
2019/01/02 Python
使用Python制作简单的小程序IP查看器功能
2019/04/16 Python
Python图像处理二值化方法实例汇总
2020/07/24 Python
一套软件开发工程师笔试题
2015/05/18 面试题
上课迟到检讨书100字
2014/01/11 职场文书
政风行风建设责任书
2014/07/23 职场文书
社区文艺活动方案
2014/08/19 职场文书
群众路线教育实践活动民主生活会个人检查对照思想汇报
2014/10/04 职场文书
投诉信范文
2015/07/02 职场文书
《游戏王:大师决斗》将推出新卡牌包4月4日上线
2022/03/31 其他游戏