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

  今天碰到一个关于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为啥要设计成这样呢。