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 相关文章推荐
用session做客户验证时的注意事项
Oct 09 PHP
PHP 多维数组排序实现代码
Aug 05 PHP
PHP取得一个类的属性和方法的实现代码
May 22 PHP
php利用cookie实现自动登录的方法
Dec 10 PHP
php数组比较实现查找连续数的方法
Jul 29 PHP
使用PHP实现微信摇一摇周边红包
Jan 04 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
May 27 PHP
PHP判断一个数组是另一个数组子集的方法详解
Jul 31 PHP
Ubuntu上安装yaf扩展的方法
Jan 29 PHP
Mac下快速搭建PHP开发环境步骤详解
May 05 PHP
PHP获取当前时间不准确问题解决方案
Aug 14 PHP
php png失真的原因及解决办法
Nov 17 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+jquery编码方面的一些心得(utf-8 gb2312)
2010/10/12 PHP
php中存储用户ID和密码到mysql数据库的方法
2013/02/06 PHP
如何给phpcms v9增加类似于phpcms 2008中的关键词表
2013/07/01 PHP
PHP读取文件内容的五种方式
2015/12/28 PHP
php连接mysql数据库
2017/03/21 PHP
thinkPHP5 ACL用户权限模块用法详解
2017/05/10 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
2020/03/23 PHP
javascript 类型判断代码分析
2010/03/28 Javascript
浅析jQuery对select操作小结(遍历option,操作option)
2013/07/04 Javascript
js/html光标定位的实现代码
2013/09/23 Javascript
图片放大镜jquery.jqzoom.js使用实例附放大镜图标
2014/06/19 Javascript
AngularJS ng-style中使用filter
2016/09/21 Javascript
vue2.0中goods选购栏滚动算法的实现代码
2017/05/17 Javascript
详解一个小实例理解js原型和继承
2019/04/24 Javascript
Vue父组件如何获取子组件中的变量
2019/07/24 Javascript
Element PageHeader页头的使用方法
2020/07/26 Javascript
[42:20]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
[59:30]VG vs LGD 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
Python的ORM框架SQLAlchemy入门教程
2014/04/28 Python
采用Psyco实现python执行速度提高到与编译语言一样的水平
2014/10/11 Python
Python迭代器和生成器介绍
2015/03/06 Python
Python中字符串对齐方法介绍
2015/05/21 Python
python和flask中返回JSON数据的方法
2018/03/26 Python
python redis连接 有序集合去重的代码
2019/08/04 Python
python2爬取百度贴吧指定关键字和图片代码实例
2019/08/14 Python
Python容器使用的5个技巧和2个误区总结
2019/09/26 Python
Python3如何对urllib和urllib2进行重构
2019/11/25 Python
Python 开发工具PyCharm安装教程图文详解(新手必看)
2020/02/28 Python
Python 爬虫性能相关总结
2020/08/03 Python
波兰运动鞋网上商店:e-Sporting
2018/02/16 全球购物
介绍一下linux的文件系统
2015/10/06 面试题
大二法英学生职业生涯规划范文
2014/02/27 职场文书
乡镇党员干部群众路线对照检查材料思想汇报
2014/09/28 职场文书
舌尖上的中国观后感
2015/06/02 职场文书
python自动计算图像数据集的RGB均值
2021/06/18 Python
springboot项目以jar包运行的操作方法
2021/06/30 Java/Android