PHP中返回引用类型的方法 |
本文标签:PHP,返回引用类型 返回引用,在定义和调用的时候 & 都不可以省略 。 这是个比较容易混淆的概念,如果不是出于某些特殊的原因,建议还是不要使用 。 说他很容易混,是因为 Reference 在 PHP5 中的变化,造成其在 PHP4/PHP5 中表现的行为差异比较大 。 举个例子说明: 复制代码 代码如下: <?php $color = YellowGreen; function &getRef() { global $color; return $color; } function getCopy() { 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 中就有点另类了, 这里 getCopy() 和 &getRef() 是两个全局函数,如果放到类里面成为类的 Member functions,那又会是另外一番景象…… PS:返回 References 并不会提高性能,有时候反而降低性能,所以不要想当然的使用这个特性来“优化”程序 。 有问题看看手册大部分时候都可以找到答案: http://cn.php.net/manual/en/language.references.php |