PHP中返回引用类型的方法

 更新时间:2015年04月03日 11:02:02   投稿:junjie  
这篇文章主要介绍了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 中就有点另类了,
最新的 PHP5.2,行为和 PHP4 一样,getCopy() 返回复制,&getRef() 返回引用。
但是某些的 PHP5 的版本这里稍微有些不同,比如 PHP5.1.6,表现为 getCopy() 和 &getRef() 都是引用。

这里 getCopy() 和 &getRef() 是两个全局函数,如果放到类里面成为类的 Member functions,那又会是另外一番景象……

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

有问题看看手册大部分时候都可以找到答案:

http://cn.php.net/manual/en/language.references.php

相关文章

  • php实现用于删除整个目录的递归函数

    php实现用于删除整个目录的递归函数

    这篇文章主要介绍了php实现用于删除整个目录的递归函数,涉及php递归算法与目录操作技巧,需要的朋友可以参考下
    2015-03-03
  • php实现敏感关键词过滤的示例代码

    php实现敏感关键词过滤的示例代码

    这篇文章主要为大家详细介绍了如何通过php实现关键词过滤,文中的示例代码讲解详细,具有一定的参考价值,有需要的小伙伴可以参考下
    2023-11-11
  • PHP使用观察者模式处理异常信息的方法详解

    PHP使用观察者模式处理异常信息的方法详解

    这篇文章主要介绍了PHP使用观察者模式处理异常信息的方法,结合实例形式详细分析了php观察者模式处理异常信息相关原理、实现方法及操作注意事项,需要的朋友可以参考下
    2019-09-09
  • PHP数据分析引擎计算余弦相似度算法示例

    PHP数据分析引擎计算余弦相似度算法示例

    这篇文章主要介绍了PHP数据分析引擎计算余弦相似度算法,结合具体实例形式分析了php计算余弦相似度的操作步骤与相关实现技巧,需要的朋友可以参考下
    2017-08-08
  • PHP 中文乱码解决办法总结分析

    PHP 中文乱码解决办法总结分析

    总之一句话,要解决PHP中文乱码最好最快的解决办法就是,页面申明的编码与数据库内部编码一致,如果页面申请的页码与数据库内部编码不一致时,就设定连接编码,mysql_query(”SET NAMES XXX”); XXX为连接编码.一定可以解决乱码的问题.
    2009-07-07
  • php 批量生成html,txt文件的实现代码

    php 批量生成html,txt文件的实现代码

    本篇文章是对使用php批量生成html,txt文件的实现代码进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • joomla jce editor 解决上传中文名文件失败问题

    joomla jce editor 解决上传中文名文件失败问题

    要么上传失败,要么传上去了中文名不能被web访问,研究了下JCE的源码,改掉保存文件名的方式,使用纯数字来作为文件名,具体修改如下,遇到类型情况的朋友可以参考下哈
    2013-06-06
  • 关于IIS php调用com组件的权限问题

    关于IIS php调用com组件的权限问题

    Word的对象库文件“MSWORD.OLB”(word 2000为MSWORD9.OLB)(这是针对老版本的情况,在用vs.net2005的时候,直接在引用对话框中,在com组件里找到对word的库文件的引用就可以了,文件名好像是一样的
    2012-01-01
  • php设计模式 Chain Of Responsibility (职责链模式)

    php设计模式 Chain Of Responsibility (职责链模式)

    为解除请求的发送者和接收者之间的耦合,而使用多个对象都用机会处理这个请求,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它
    2011-06-06
  • phpStudy在运行PHP文件时出现中文乱码的有效解决方法

    phpStudy在运行PHP文件时出现中文乱码的有效解决方法

    在使用phpStudy进行PHP开发时,经常会遇到中文显示乱码的问题,这不仅影响开发效率,还可能导致网站显示异常,本文将详细介绍解决phpStudy中文乱码的有效方法,需要的朋友可以参考下
    2024-10-10

最新评论