PHP中返回引用类型的方法
返回引用,在定义和调用的时候&都不可以省略。
这是个比较容易混淆的概念,如果不是出于某些特殊的原因,建议还是不要使用。
说他很容易混,是因为Reference在PHP5中的变化,造成其在PHP4/PHP5中表现的行为差异比较大。
举个例子说明:
<?php $color='YellowGreen'; function&getRef(){ global$color; return$color; } functiongetCopy(){ global$color; return$color; } $colorRef=&getRef(); $colorRef='Blue'; //$colorCopy=getCopy(); //$colorCopy='Black'; var_dump($color); var_dump($colorRef); //var_dump($colorCopy);
运行一遍上面的代码,差不多就明白了,使用&getRef()将把$colorRef绑定到$color上面,也就是说$colorRef和$color两个变量是指向同一个值了。当改变其中一个值时,另一个也会跟着变化。
如果$color是一个数组,也是一样的,上面的代码在PHP4/5的任意版本中,表现行为都是一样的。
当$color是一个Object的时候,问题就出现了。
PHP4中getCopy仍然会返回一个复制的Object;&getRef()返回引用。
PHP5中就有点另类了,
最新的PHP5.2,行为和PHP4一样,getCopy()返回复制,&getRef()返回引用。
但是某些的PHP5的版本这里稍微有些不同,比如PHP5.1.6,表现为getCopy()和&getRef()都是引用。
这里getCopy()和&getRef()是两个全局函数,如果放到类里面成为类的Memberfunctions,那又会是另外一番景象……
PS:返回References并不会提高性能,有时候反而降低性能,所以不要想当然的使用这个特性来“优化”程序。
有问题看看手册大部分时候都可以找到答案:
http://cn.php.net/manual/en/language.references.php