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 相关文章推荐
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
Mar 28 PHP
使用VisualStudio开发php的图文设置方法
Aug 21 PHP
解析isset与is_null的区别
Aug 09 PHP
学习php分页代码实例
Oct 24 PHP
FireFox浏览器使用Javascript上传大文件
Oct 30 PHP
php中count获取多维数组长度的方法
Nov 03 PHP
php将数组存储为文本文件方法汇总
Oct 28 PHP
在WordPress中使用PHP脚本来判断访客来自什么国家
Dec 10 PHP
php中文乱码问题的终极解决方案汇总
Aug 01 PHP
PHP实现的字符串匹配算法示例【sunday算法】
Dec 19 PHP
thinkPHP5框架设置404、403等http状态页面的方法
Jun 05 PHP
yii框架结合charjs实现统计30天数据的方法
Apr 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的大小写敏感问题整理
2011/12/29 PHP
PHP数组无限分级数据的层级化处理代码
2012/12/29 PHP
php文件上传的简单实例
2013/10/19 PHP
php去掉URL网址中带有PHPSESSID的配置方法
2014/07/08 PHP
javaScript 简单验证代码(用户名,密码,邮箱)
2009/09/28 Javascript
JavaScript 浏览器验证代码(来自discuz)
2010/07/17 Javascript
基于jQuery的输入框无值自动显示指定数据的实现代码
2011/01/24 Javascript
javascript学习笔记(七)利用javascript来创建和存储cookie
2011/04/08 Javascript
jquery如何判断某元素是否具备指定的样式
2013/11/05 Javascript
浅析javascript操作 cookie对象
2014/12/26 Javascript
jQuery通过Ajax返回JSON数据
2015/04/28 Javascript
JS+CSS实现类似QQ好友及黑名单效果的树型菜单
2015/09/22 Javascript
jQuery实现瀑布流布局详解(PC和移动端)
2020/09/01 Javascript
JavaScript动态设置div的样式的方法
2015/12/26 Javascript
实例详解ECMAScript5中新增的Array方法
2016/04/05 Javascript
js简单实现调整网页字体大小的方法
2016/07/23 Javascript
jquery css实现邮箱自动补全
2016/11/14 Javascript
Javascript循环删除数组中元素的几种方法示例
2017/05/18 Javascript
vue.js选中动态绑定的radio的指定项
2017/06/02 Javascript
详解Angular2学习笔记之Html属性绑定
2018/01/03 Javascript
vue实现简单跑马灯效果
2020/05/25 Javascript
Python中的with...as用法介绍
2015/05/28 Python
用Python实现读写锁的示例代码
2018/11/05 Python
对Python 语音识别框架详解
2018/12/24 Python
Python内置random模块生成随机数的方法
2019/05/31 Python
Python3 虚拟开发环境搭建过程(图文详解)
2020/01/06 Python
一篇文章教你用python画动态爱心表白
2020/11/22 Python
Veronica Beard官网:在酷、经典和别致之间找到了平衡
2018/01/11 全球购物
Wedgwood美国官网:英国骨瓷,精美礼品及家居装饰
2018/02/17 全球购物
英国Boots旗下太阳镜网站:Boots Designer Sunglasses
2018/07/07 全球购物
Tommy Hilfiger美国官网:美国高端休闲领导品牌
2019/01/14 全球购物
学生评语大全
2014/04/18 职场文书
给下属加薪申请报告
2015/05/15 职场文书
解决Pytorch中关于model.eval的问题
2021/05/22 Python
浅谈Python从全局与局部变量到装饰器的相关知识
2021/06/21 Python
vue递归实现树形组件
2022/07/15 Vue.js