首页  >  文章  >  后端开发  >  有关PHP引用的解释

有关PHP引用的解释

WBOY
WBOY原创
2016-07-25 08:56:141076浏览
  1. function &bar() {
  2. $a = 5;
  3. return $a;
  4. }
复制代码

在使用时如下: $ret = &bar(); 即,定义和使用时都需要加&符号。

5,对象的赋值传递 注意:在PHP4和PHP5中对象资源的赋值传递是有区别的。 PHP4中:

  1. $a = new Object() 实际上$a和new Object()的映射到不同对象实例,所以需要显式地使用$a = & new Object()来进行引用赋值传递。
  2. $b = $a 同上。
  3. foo(new Object()) / foo($a) 同上。
  4. foo() {$a = new Object(); return $a} 同上。
复制代码

PHP5中:

  1. $a = new Object() 两者映射到同一对象,不需要使用引用符。
  2. $b = $a 同上。
  3. foo(new Object()) / foo($a) 同上。
  4. foo() {$a = new Object(); return $a} 同上。
复制代码

备注: 在测试时发现: $a = new Object(); $b = $a后,如果$a->attr = 12; $b->attr = 13,最后结果为$a->attr和$b->attr都等于13,而不是想象中的各自独立。 可能是$a->attr 和$b->attr并没有做深拷贝,仍是同一块内存的不同映射。 如果是$a = new Object(); $b = &$a; 则不存在该疑惑,因为从头到尾只有一个真实对象,$a和$b都只是映射而已。

6,unset与=null 使用unset($a)与$a=null的结果是不一样的。 如果该块内存只有$a一个映射,那么unset($a)与$a=null等价,该内存的引用计数 变为0,被自动回收; 如果该块内存有$a和$b两个映射,那么unset($a)将导致$a=null且$b不变的情况,而$a=null会导 致$a=$b=null的情况。

原因分析: 某变量赋值为null,将导致该变量对应的内存块的引用计数直接置为0,被自动回收。



声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn