首頁  >  文章  >  後端開發  >  有關PHP引用的解釋

有關PHP引用的解釋

WBOY
WBOY原創
2016-07-25 08:56:141077瀏覽
  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