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 中使用随机数的三个步骤
Oct 09 PHP
PHP下一个非常全面获取图象信息的函数
Nov 20 PHP
php XMLWriter类的简单示例代码(RSS输出)
Sep 30 PHP
PHP 第二节 数据类型之数值型
Apr 28 PHP
php+flash+jQuery多图片上传源码分享
Jul 27 PHP
php基于自定义函数记录log日志方法
Jul 21 PHP
Laravel如何使用数据库事务及捕获事务失败后的异常详解
Oct 23 PHP
php使用curl伪造来源ip和refer的方法示例
May 08 PHP
Laravel框架中缓存的使用方法分析
Sep 06 PHP
php服务器的系统详解
Oct 12 PHP
PHP上传图片到数据库并显示的实例代码
Dec 20 PHP
PHP实现随机发扑克牌
Apr 22 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简单命令代码集锦
2007/09/24 PHP
轻松修复Discuz!数据库
2008/05/03 PHP
PHP的explode和implode的使用说明
2011/07/17 PHP
THINKPHP5.1 Config的配置与获取详解
2020/06/08 PHP
动手学习无线电
2021/03/10 无线电
JavaScript DOM学习第一章 W3C DOM简介
2010/02/19 Javascript
浅析Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行实例)
2013/07/09 Javascript
JavaScript初学者建议:不要去管浏览器兼容
2014/02/04 Javascript
jQuery实现table隔行换色和鼠标经过变色的两种方法
2014/06/15 Javascript
js实现正方形颜色从下往上升的效果
2014/08/04 Javascript
JsRender for index循环索引用法详解
2014/10/31 Javascript
深入理解JavaScript系列(47):对象创建模式(上篇)
2015/03/04 Javascript
JavaScript实现强制重定向至HTTPS页面
2015/06/10 Javascript
如何使用headjs来管理和异步加载js
2016/11/29 Javascript
node.js报错:Cannot find module 'ejs'的解决办法
2016/12/14 Javascript
Vue.js事件处理器与表单控件绑定详解
2017/03/20 Javascript
js实现可以点击收缩或张开的悬浮窗
2017/09/18 Javascript
如何利用JavaScript编写更好的条件语句详解
2020/08/10 Javascript
PHP魔术方法__ISSET、__UNSET使用实例
2014/11/25 Python
Python获取网页上图片下载地址的方法
2015/03/11 Python
浅析Python中的赋值和深浅拷贝
2017/08/15 Python
python实现自动获取IP并发送到邮箱
2018/12/26 Python
详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
2019/02/25 Python
Python调用百度根据经纬度查询地址的示例代码
2019/07/07 Python
python爬虫 urllib模块反爬虫机制UA详解
2019/08/20 Python
使用python实现多维数据降维操作
2020/02/24 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
2020/02/27 Python
pycharm中leetcode插件使用图文详解
2020/12/07 Python
详解用 python-docx 创建浮动图片
2021/01/24 Python
车库门开启器、遥控器和零件:Chamberlain
2019/04/09 全球购物
工厂仓管员岗位职责
2014/01/01 职场文书
自荐信的基本格式
2014/02/22 职场文书
批评与自我批评发言稿
2014/10/15 职场文书
总经理助理岗位职责范本
2015/03/31 职场文书
本科毕业答辩开场白
2015/05/27 职场文书
解决 Redis 秒杀超卖场景的高并发
2022/04/12 Redis