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里的JS打印函数
Oct 09 PHP
php下使用以下代码连接并测试
Apr 09 PHP
基于Snoopy的PHP近似完美获取网站编码的代码
Oct 23 PHP
基于php中使用excel的简单介绍
Aug 02 PHP
常见PHP数据库解决方案分析介绍
Sep 24 PHP
PHP响应post请求上传文件的方法
Dec 17 PHP
微信红包随机生成算法php版
Jul 21 PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
Oct 10 PHP
详解Yii2 rules 的验证规则
Dec 02 PHP
thinkphp 字母函数详解T/I/N/D/M/A/R/U
Apr 03 PHP
php验证码生成器
May 24 PHP
JS操作XML中DTD介绍及使用方法分析
Jul 04 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实现批量压缩图片文件大小的脚本
2014/07/04 PHP
实例分析PHP将字符串转换成数字的方法
2019/01/27 PHP
设置下载不需要倒计时cookie(倒计时代码)
2008/11/19 Javascript
JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解
2010/04/29 Javascript
javascript自适应宽度的瀑布流实现思路
2013/02/20 Javascript
简单实用jquery版三级联动select示例
2013/07/04 Javascript
jquery 获取dom固定元素 添加样式的简单实例
2014/02/04 Javascript
利用JavaScript的AngularJS库制作电子名片的方法
2015/06/18 Javascript
AngularJS入门教程之表格实例详解
2016/07/27 Javascript
浅谈Angular中ngModel的$render
2016/10/24 Javascript
微信小程序  自定义创建详细介绍
2016/10/27 Javascript
JavaScript中双符号的运算详解
2017/03/12 Javascript
jQuery实现frame之间互通的方法
2017/06/26 jQuery
vue2.0+vuex+localStorage代办事项应用实现详解
2018/05/31 Javascript
基于JS实现带动画效果的流程进度条
2018/06/01 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
nodejs微信开发之授权登录+获取用户信息
2019/03/17 NodeJs
ES6 class的应用实例分析
2019/06/27 Javascript
vue监听用户输入和点击功能
2019/09/27 Javascript
vue el-table实现自定义表头
2019/12/11 Javascript
基于Web Audio API实现音频可视化效果
2020/06/12 Javascript
Vue实现指令式动态追加小球动画组件的步骤
2020/12/18 Vue.js
[55:26]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第一场 2月23日
2021/03/11 DOTA
Python使用SocketServer模块编写基本服务器程序的教程
2016/07/12 Python
pandas数据框,统计某列数据对应的个数方法
2018/04/11 Python
在django view中给form传入参数的例子
2019/07/19 Python
python调用matplotlib模块绘制柱状图
2019/10/18 Python
HTML5进度条特效
2014/12/18 HTML / CSS
Farnell德国:电子元器件供应商
2018/07/10 全球购物
Columbia Sportswear法国官网:全球户外品牌
2020/09/25 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2012/04/17 面试题
幼儿教师国培感言
2014/02/19 职场文书
学习2014年全国两会心得体会
2014/03/12 职场文书
白岩松演讲
2014/05/21 职场文书
《围炉夜话》110句人生箴言,精辟有内涵,引人深思
2019/10/23 职场文书
JavaScript分页组件使用方法详解
2021/07/26 Javascript