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 相关文章推荐
Win2000+Apache+MySql+PHP4+PERL安装使用小结
Oct 09 PHP
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
May 03 PHP
php echo()和print()、require()和include()函数区别说明
Mar 27 PHP
php入门学习知识点六 PHP文件的读写操作代码
Jul 14 PHP
php发送html格式文本邮件的方法
Jun 10 PHP
PHP合并数组+号和array_merge的区别
Jun 25 PHP
从刷票了解获得客户端IP的方法
Sep 21 PHP
学习php设计模式 php实现工厂模式(factory)
Dec 07 PHP
php实现图片上传并进行替换操作
Mar 15 PHP
PHP实现的mysql主从数据库状态检测功能示例
Jul 20 PHP
php制作圆形用户头像的实例_自定义封装类源代码
Sep 18 PHP
PHP使用OB缓存实现静态化功能示例
Mar 23 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实现的css文件背景图片下载器代码
2014/11/11 PHP
WordPress中获取页面链接和标题的相关PHP函数用法解析
2015/12/17 PHP
List Information About the Binary Files Used by an Application
2007/06/18 Javascript
JQuery 解析多维的Json数据格式
2009/11/02 Javascript
IE6图片加载的一个BUG解决方法
2010/07/13 Javascript
JQuery each()函数如何优化循环DOM结构的性能
2012/12/10 Javascript
利用webqq协议使用python登录qq发消息源码参考
2013/04/08 Javascript
Js控制弹窗实现在任意分辨率下居中显示
2013/08/01 Javascript
关于onchange事件在IE和FF下的表现及解决方法
2014/03/08 Javascript
轻松创建nodejs服务器(4):路由
2014/12/18 NodeJs
jQuery判断一个元素是否可见的方法
2015/06/05 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
2015/08/24 Javascript
手机端转盘抽奖代码分享
2015/09/10 Javascript
使用jQuery中的wrap()函数操作HTML元素的教程
2016/05/24 Javascript
js弹出窗口简单实现代码
2017/03/22 Javascript
本地存储localStorage用法详解
2017/07/31 Javascript
Bootstrap与Angularjs的模态框实例代码
2017/08/03 Javascript
es6系列教程_ Map详解以及常用api介绍
2017/09/25 Javascript
seajs模块压缩问题与解决方法实例分析
2017/10/10 Javascript
JavaScript学习笔记之数组基本操作示例
2019/01/09 Javascript
JavaScript代理模式原理与用法实例详解
2020/03/10 Javascript
js判断鼠标移入移出方向的方法
2020/06/24 Javascript
Python字典操作简明总结
2015/04/13 Python
Python中的单下划线和双下划线使用场景详解
2019/09/09 Python
在TensorFlow中屏蔽warning的方式
2020/02/04 Python
TensorFlow打印输出tensor的值
2020/04/19 Python
Django+Django-Celery+Celery的整合实战
2021/01/20 Python
德国童装购物网站:NICKI´S.com
2018/04/20 全球购物
Linux中如何用命令创建目录
2016/12/02 面试题
电焊工岗位职责
2014/03/06 职场文书
企业三严三实学习心得体会
2014/10/13 职场文书
2014年协会工作总结
2014/11/22 职场文书
新教师教学工作总结
2015/08/14 职场文书
国产动画《万圣街》日语配音版制作决定!
2022/03/20 国漫
tomcat默认最大连接数及相关调整方法
2022/05/06 Servers
使用CSS定位HTML元素的实现方法
2022/07/07 HTML / CSS