petrel919 发表于 2018-12-19 14:00:34

php的引用变量与销毁机制

  在php中,符号"&"表示引用。
  1、看看不引用的情况是这样子:
  $a= "hello world";//定义一个变量,下面赋值给$b
  $b = $a;//这一步没有在$a之前加符号&,像这样子"$b= & $a"。没有加&,实际上原理是会将变量$a复制拷贝一份,也就是内存中重新申请一个地址存储变量$b了
  ps:在php中,使用"="直接赋值,其实就是拷贝一份右边的变量给b,会生成一份内存空间,结果可能是同样的内容在内存中两份。在有些关于php性能方面提到,这样子会多占有内存空间。不过我接触中,大部分人没怎么注意,其实一般应用这样子用产生的显著差异并不明显。不会看到什么效果,其实我本人也没经常使用&进行引用,呵呵。只是我觉得,深入了解里面的实现原理,非常有必要。我喜欢关注原理性的东西。
  2、使用符号&进行引用
  $a= "hello world";
  $b = &$a;
  使用引用,php引擎不会拷贝一份变量,其实就是将指针指向了$a在内存中的地址,$b中就是保存了这个指针。
  所以使用引用的时候,把$b的值改变,$a也会跟着改变
  比如:
  $a= "hello world";
  $b = &$a;
  $b = "test new value";//把b的值改掉,a的值也会跟着改变
  echo $a;//输出test new value,因为改变了b的值也会改变a的值。
  =====================================
  销毁变量的时候。并不会改变原来的值
  试验:$b = & $a;
  既然改变$b的值,$a的值也跟着改变,假如把$b销毁掉(内存中不占用空间了,不是null,也不是值为""),$a的值是不是也会跟着被删掉呢?
  其实国外有本php方面的书中专门提到了这个机制。2年前看的。不是很记得了。原则是就是删除变量的时候,会自动拷贝。
  其实这样子,就是为了避免把$b给删掉,造成把$a也给删掉的问题。
  
页: [1]
查看完整版本: php的引用变量与销毁机制