当前位置:首页 > PHP教程 > php应用 > 列表

PHP变量内存分配问题记录整理

发布:smiling 来源: PHP粉丝网  添加日期:2020-07-13 15:39:25 浏览: 评论:0 

今天碰到一个关于php变量内存分配的问题,记录一下,如下这段代码: 

  1. $a = array (  
  2. 'str' => 1,  
  3. 'child' => 2  
  4. );  
  5.  
  6. $b = $a;  
  7. $b['child'] = $a;  
  8. $b['child']['str'] = 2;  
  9. echo $b['str'];  
  10. $b = null;  
  11. echo $a['str'];  

会输出什么呢,结果是11,$b=$a的时候其实并没有新分配内存,ab是指向的同一个区域,$b['child']=$a时,$b会先copy一份原来$a的内容,然后再修改,也就是说这时候$b和$a指向了不同的区域,再修改$a或者$b的时候都不会互相影响了。

再看这段代码: 

  1. class A  
  2. {  
  3. public $str = '';  
  4. public $child;  
  5. }  
  6.  
  7. $a = new A();  
  8. $b = $a;  
  9. $a->str = 1;  
  10. $a->child = 2;  
  11. $b->child = $a;  
  12. $b->child->str = 2;  
  13. echo $b->str;  
  14. $b = null;  
  15. echo $a->str;  

又会输出什么呢,结果是22,根据实际情况来判断,$b->child=$a的时候,并没有像数组那样,重新copy一份,ab以及a->child都是指向的同一片区域,这样改任何一个,其余几个都会被改掉。 

Tags: PHP内存分配

分享到: