当前位置:首页 > PHP教程 > php应用 > 列表

PHP中返回引用类型的方法

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-21 10:46:18 浏览: 评论:0 

这篇文章主要介绍了PHP中返回引用类型的方法,这是个比较容易混淆的概念,如果不是出于某些特殊的原因,建议还是不要使用,需要的朋友可以参考下

返回引用,在定义和调用的时候 & 都不可以省略。

这是个比较容易混淆的概念,如果不是出于某些特殊的原因,建议还是不要使用。

说他很容易混,是因为 Reference 在 PHP5 中的变化,造成其在 PHP4/PHP5 中表现的行为差异比较大。

举个例子说明:

  1. <?php 
  2.  
  3. $color = 'YellowGreen'
  4.  
  5. function &getRef() { 
  6.     global $color
  7.     return $color
  8.  
  9. function getCopy() { 
  10.     global $color
  11.     return $color
  12.  
  13. $colorRef = &getRef(); 
  14. $colorRef = 'Blue'
  15.  
  16. //$colorCopy = getCopy(); 
  17. //$colorCopy = 'Black'; 
  18.  
  19.  
  20. var_dump($color); 
  21. var_dump($colorRef); 
  22. //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() 是两个全局函数,如果放到类里面成为类的 Member functions,那又会是另外一番景象……

PS:返回 References 并不会提高性能,有时候反而降低性能,所以不要想当然的使用这个特性来“优化”程序。

Tags: PHP返回引用类型

分享到: