首頁 > 後端開發 > php教程 > 有關PHP引用的解釋

有關PHP引用的解釋

WBOY
發布: 2016-07-25 08:56:14
原創
1145 人瀏覽過
  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,被自动回收。



相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板