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 相关文章推荐
如何限制访问者的ip(PHPBB的代码)
Oct 09 PHP
PHP脚本的10个技巧(3)
Oct 09 PHP
php面向对象全攻略 (十七) 自动加载类
Sep 30 PHP
smarty模板嵌套之include与fetch性能测试
Dec 05 PHP
php报表之jpgraph柱状图实例代码
Aug 22 PHP
PHP获取网址的顶级域名函数代码
Sep 24 PHP
win7下memCache的安装过程(具体操作步骤)
Jun 28 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
Sep 28 PHP
php判断类是否存在函数class_exists用法分析
Nov 14 PHP
Mac环境下php操作mysql数据库的方法分享
May 11 PHP
PHP curl 或 file_get_contents 获取需要授权页面的方法
May 05 PHP
PHP迭代器和迭代的实现与使用方法分析
Apr 19 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里的JS打印函数
2006/10/09 PHP
PHP PDO函数库详解
2010/04/27 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
2014/07/25 PHP
从零开始学YII2框架(六)高级应用程序模板
2014/08/20 PHP
php递归json类实例
2014/12/02 PHP
php学习笔记之mb_strstr的基本使用
2018/02/03 PHP
laravel http 自定义公共验证和响应的方法
2019/09/29 PHP
漂亮的提示信息(带箭头)
2007/03/21 Javascript
javascript 异常处理使用总结
2009/06/21 Javascript
Prototype Selector对象学习
2009/07/23 Javascript
JavaScript 捕获窗口关闭事件
2009/07/26 Javascript
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
2010/05/21 Javascript
js将json格式内容转换成对象的方法
2013/11/01 Javascript
js数组去重的5种算法实现
2015/11/04 Javascript
原生javascript+css3编写的3D魔方动画旋扭特效
2016/03/14 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
2016/08/05 Javascript
微信小程序ajax实现请求服务器数据及模版遍历数据功能示例
2017/12/15 Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
2019/05/01 Javascript
详解Vue demo实现商品列表的展示
2019/05/07 Javascript
Vue实现点击当前行变色
2020/12/14 Vue.js
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
2020/12/25 Vue.js
ES2020让代码更优美的运算符 (?.) (??)
2021/01/04 Javascript
python实现的系统实用log类实例
2015/06/30 Python
Python实现统计给定列表中指定数字出现次数的方法
2018/04/11 Python
tensorflow 打印内存中的变量方法
2018/07/30 Python
使用Python文件读写,自定义分隔符(custom delimiter)
2020/07/05 Python
俄罗斯游戏商店:Buka
2020/03/01 全球购物
全球异乡人的跨境社交电商平台:Kouhigh口嗨网
2020/07/24 全球购物
金鑫耀Java笔试题
2014/09/06 面试题
鸿星尔克广告词
2014/03/21 职场文书
学雷锋志愿者活动总结
2014/06/27 职场文书
12.4法制宣传日标语
2014/10/08 职场文书
施工现场安全管理制度
2015/08/05 职场文书
英文诗歌翻译方法(赏析)
2019/08/16 职场文书
Django实现聊天机器人
2021/05/31 Python
Go语言实现Base64、Base58编码与解码
2021/07/26 Golang