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下检测字符串是否是utf8编码的代码
Jun 28 PHP
PHP 事件机制(2)
Mar 23 PHP
PH P5.2至5.5、5.6的新增功能详解
Jul 14 PHP
ThinkPHP模版中导入CSS和JS文件的方法
Nov 29 PHP
PHP跨平台获取服务器IP地址自定义函数分享
Dec 29 PHP
php实现求相对时间函数
Jun 15 PHP
YII动态模型(动态表名)支持分析
Mar 29 PHP
php实现产品加入购物车功能(1)
Jul 23 PHP
PHP简单实现二维数组的矩阵转置操作示例
Nov 24 PHP
PHP依赖注入原理与用法分析
Aug 21 PHP
php设计模式之单例模式用法经典示例分析
Sep 20 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
Feb 18 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游戏编程25个脚本代码
2011/02/08 PHP
php+ajax实现图片文件上传功能实例
2014/06/17 PHP
php中ob_flush函数和flush函数用法分析
2015/03/18 PHP
php实现数组按指定KEY排序的方法
2015/03/30 PHP
PHP中通过trigger_error触发PHP错误示例
2015/06/23 PHP
php正确输出json数据的实例讲解
2018/08/21 PHP
将函数的实际参数转换成数组的方法
2010/01/25 Javascript
5分钟理解JavaScript中this用法分享
2013/11/09 Javascript
node.js中watch机制详解
2014/11/17 Javascript
浅谈js数组和splice的用法
2016/12/04 Javascript
详解微信小程序开发之——wx.showToast(OBJECT)的使用
2017/01/18 Javascript
微信小程序之MaterialDesign--input组件详解
2017/02/15 Javascript
Bootstrap 表单验证formValidation 实现远程验证功能
2017/05/17 Javascript
JS动态添加元素及绑定事件造成程序重复执行解决
2017/12/07 Javascript
AngularJS模态框模板ngDialog的使用详解
2018/05/11 Javascript
JavaScript执行环境及作用域链实例分析
2018/08/01 Javascript
js常用正则表达式集锦
2019/05/17 Javascript
JavaScript使用prototype属性实现继承操作示例
2020/05/22 Javascript
处理JavaScript值为undefined的7个小技巧
2020/07/28 Javascript
python Selenium爬取内容并存储至MySQL数据库的实现代码
2017/03/16 Python
python之PyMongo使用总结
2017/05/26 Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
2018/06/04 Python
Python中GeoJson和bokeh-1的使用讲解
2019/01/03 Python
Python如何实现转换URL详解
2019/07/02 Python
Python多进程编程multiprocessing代码实例
2020/03/12 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
2020/05/27 Python
零基础小白多久能学会python
2020/06/22 Python
CSS Grid布局教程之浏览器开启CSS Grid Layout汇总
2014/12/30 HTML / CSS
利用CSS3实现文本框的清除按钮相关的一些效果
2015/06/23 HTML / CSS
编码实现字符串转整型的函数
2012/06/02 面试题
说出你对remoting 和webservice的理解和应用
2014/06/08 面试题
《巨人的花园》教学反思
2014/02/12 职场文书
幼儿园托班开学寄语(2016春季)
2015/12/03 职场文书
2016秋季运动会开幕词
2016/03/04 职场文书
小学三年级作文之写景
2019/11/05 职场文书
图文详解Nginx版本平滑升级方案
2021/09/15 Servers