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 相关文章推荐
phpfans留言版用到的数据操作类和分页类
Jan 04 PHP
php防止伪造的数据从URL提交方法
Jun 27 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
Jan 26 PHP
Laravel5中contracts详解
Mar 02 PHP
简单介绍PHP的责任链编程模式
Aug 11 PHP
必须收藏的php实用代码片段
Feb 02 PHP
浅析Yii2集成富文本编辑器redactor实例教程
Apr 25 PHP
PHP上传图片类显示缩略图功能
Jun 30 PHP
PHP编写文件多服务器同步程序
Jul 02 PHP
详解php用static方法的原因
Sep 12 PHP
mongodb和php的用法详解
Mar 25 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 27 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
2个比较经典的PHP加密解密函数分享
2014/07/01 PHP
CentOS安装php v8js教程
2015/02/26 PHP
PHP实现自动发送邮件功能代码(qq 邮箱)
2017/08/18 PHP
javascript radio 联动效果
2009/03/04 Javascript
用 Javascript 验证表单(form)中的单选(radio)值
2009/09/08 Javascript
获取css样式表内样式的js函数currentStyle(IE),defaultView(FF)
2011/02/14 Javascript
事件绑定之小测试  onclick &amp;&amp; addEventListener
2011/07/31 Javascript
jquery 插件学习(二)
2012/08/06 Javascript
Javascript图像处理—为矩阵添加常用方法
2012/12/27 Javascript
JavaScript1.6数组新特性介绍以及JQuery的几个工具方法
2013/12/06 Javascript
浅谈javascript六种数据类型以及特殊注意点
2013/12/20 Javascript
js实现图片放大和拖拽特效代码分享
2015/09/05 Javascript
JS实现滑动菜单效果代码(包括Tab,选项卡,横向等效果)
2015/09/24 Javascript
Hallo.js基于jQuery UI所见即所得的Web编辑器
2016/01/26 Javascript
用NODE.JS中的流编写工具是要注意的事项
2016/03/01 Javascript
浅谈Node.js轻量级Web框架Express4.x使用指南
2017/05/03 Javascript
解决layui使用layui-icon出现默认图标的问题
2019/09/11 Javascript
[01:17]炒鸡美酒第四天TA暴走
2018/06/05 DOTA
[57:22]完美世界DOTA2联赛PWL S2 FTD vs PXG 第二场 11.27
2020/12/01 DOTA
从零学Python之引用和类属性的初步理解
2014/05/15 Python
详解Python连接MySQL数据库的多种方式
2019/04/16 Python
python实现实时视频流播放代码实例
2020/01/11 Python
Python爬取微信小程序Charles实现过程图解
2020/09/29 Python
python使用smtplib模块发送邮件
2020/12/17 Python
浅析python实现动态规划背包问题
2020/12/31 Python
在HTML5中如何使用CSS建立不可选的文字
2014/10/17 HTML / CSS
HTML5 Plus 实现手机APP拍照或相册选择图片上传功能
2016/07/13 HTML / CSS
中东奢侈品购物网站:Ounass
2020/09/02 全球购物
社区工作者思想汇报
2014/01/13 职场文书
酒店中秋节活动方案
2014/01/31 职场文书
统计岗位职责
2014/02/21 职场文书
学习保证书范文
2014/04/30 职场文书
2015教师节师德演讲稿
2015/03/19 职场文书
简历自我评价:教师师德表现自我评价
2019/04/24 职场文书
Win11开始菜单添加休眠选项
2022/04/19 数码科技
Android开发手册Chip监听及ChipGroup监听
2022/06/10 Java/Android