PHP中返回引用类型的方法


Posted in PHP onApril 03, 2015

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

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

说他很容易混,是因为 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下删除字符串中HTML标签的函数
Aug 27 PHP
用PHP读取flv文件的播放时间长度
Sep 03 PHP
php 网页游戏开发入门教程一(webgame+design)
Oct 26 PHP
一组PHP可逆加密解密算法实例代码
Jan 21 PHP
php获取mysql字段名称和其它信息的例子
Apr 14 PHP
destoon首页调用求购供应信息的地区名称的方法
Aug 21 PHP
phplot生成图片类用法详解
Jan 06 PHP
php读取csv文件并输出的方法
Mar 14 PHP
教你识别简单的免查杀PHP后门
Sep 13 PHP
php上传图片获取路径及给表单字段赋值的方法
Jan 23 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
Jun 07 PHP
详解PHP中的外观模式facade pattern
Feb 05 PHP
PHP中应该避免使用同名变量(拆分临时变量)
Apr 03 #PHP
PHP5多态性与动态绑定介绍
Apr 03 #PHP
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
Apr 03 #PHP
Windows下编译PHP5.4和xdebug全记录
Apr 03 #PHP
Centos下升级php5.2到php5.4全记录(编译安装)
Apr 03 #PHP
php实现在限定区域里自动调整字体大小的类实例
Apr 02 #PHP
php实现专业获取网站SEO信息类实例
Apr 02 #PHP
You might like
发布一个迷你php+AJAX聊天程序[聊天室]提供下载
2007/07/21 PHP
thinkphp缓存技术详解
2014/12/09 PHP
学习php设计模式 php实现桥梁模式(bridge)
2015/12/07 PHP
php实现微信企业转账功能
2018/10/02 PHP
让JavaScript 轻松支持函数重载 (Part 1 - 设计)
2009/08/04 Javascript
jQuery客户端分页实例代码
2013/11/18 Javascript
jquery和css3实现的炫酷时尚的菜单导航
2014/09/01 Javascript
ajax跨域访问遇到的问题及解决方案
2019/05/23 Javascript
使用微信SDK自定义分享的方法
2019/07/03 Javascript
8个有意思的JavaScript面试题
2019/07/30 Javascript
微信小程序实现语音识别转文字功能及遇到的坑
2019/08/02 Javascript
JavaScript实现滑动门效果
2020/01/18 Javascript
小程序中的箭头函数的具体使用
2020/06/19 Javascript
javascript this指向相关问题及改变方法
2020/11/19 Javascript
javascript实现固定侧边栏
2021/02/09 Javascript
python中List的sort方法指南
2014/09/01 Python
使用grappelli为django admin后台添加模板
2014/11/18 Python
Python基于smtplib实现异步发送邮件服务
2015/05/28 Python
对于Python装饰器使用的一些建议
2015/06/03 Python
Python入门_浅谈字符串的分片与索引、字符串的方法
2017/05/16 Python
python利用标准库如何获取本地IP示例详解
2017/11/01 Python
用Python写脚本,实现完全备份和增量备份的示例
2018/04/29 Python
Python实现繁?转为简体的方法示例
2018/12/18 Python
Django基础知识 web框架的本质详解
2019/07/18 Python
Python Django Cookie 简单用法解析
2019/08/13 Python
Python+Redis实现布隆过滤器
2019/12/08 Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
2020/02/29 Python
浅谈Selenium 控制浏览器的常用方法
2020/12/04 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
澳大利亚便宜的家庭购物网站:CrazySales
2018/02/06 全球购物
德国游戏机商店:Konsolenkost
2019/12/08 全球购物
企业安全生产标语
2014/06/06 职场文书
2014教育局对照检查材料思想汇报
2014/09/23 职场文书
幼儿园感恩节活动方案
2014/10/06 职场文书
2015年毕业生实习评语
2015/03/25 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers