在使用时如下: $ret = &bar(); 即,定义和使用时都需要加&符号。 5,对象的赋值传递 注意:在PHP4和PHP5中对象资源的赋值传递是有区别的。 PHP4中:
PHP5中:
备注: 在测试时发现: $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,被自动回收。 |