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通用检测函数集合
Feb 08 PHP
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
Jul 29 PHP
php数组函数序列之array_push() 数组尾部添加一个或多个元素(入栈),返回新长度。
Nov 07 PHP
用PHP书写安全的脚本代码
Feb 05 PHP
PHP删除数组中特定元素的两种方法
Jul 02 PHP
PHP使用flock实现文件加锁的方法
Jul 01 PHP
PHP抽奖算法程序代码分享
Oct 08 PHP
php unicode编码和字符串互转的方法
Aug 12 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
Jul 07 PHP
Thinkphp5+uploadify实现的文件上传功能示例
May 26 PHP
PHP lcfirst()函数定义与用法
Mar 08 PHP
解决Laravel5.5下的toArray问题
Oct 15 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
DC最新动画电影:《战争之子》为何内容偏激,毁了一个不错的漫画
2020/04/09 欧美动漫
Php做的端口嗅探器--可以指定网站和端口
2006/10/09 PHP
在WAMP环境下搭建ZendDebugger php调试工具的方法
2011/07/18 PHP
php 删除目录下N分钟前创建的所有文件的实现代码
2013/08/10 PHP
Zend Framework框架Smarty扩展实现方法
2016/03/22 PHP
php异常处理捕获错误整理
2019/09/23 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
页面只有一个text的时候,回车自动submit的解决方法
2010/08/12 Javascript
js 动态修改css文件用到了cssRule
2014/08/20 Javascript
一个css与js结合的下拉菜单支持主流浏览器
2014/10/08 Javascript
javascript多行字符串的简单实现方式
2015/05/04 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
2016/01/12 Javascript
利用js编写响应式侧边栏
2016/09/17 Javascript
Javascript将字符串日期格式化为yyyy-mm-dd的方法
2016/10/27 Javascript
Vue.js学习之过滤器详解
2017/01/22 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
JavaScript中transform实现数字翻页效果
2017/03/08 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
2018/08/31 Javascript
JavaScript 预解析的4种实现方法解析
2019/09/03 Javascript
python文件的md5加密方法
2016/04/06 Python
windows环境下tensorflow安装过程详解
2018/03/30 Python
python 读写excel文件操作示例【附源码下载】
2019/06/19 Python
Python如何实现转换URL详解
2019/07/02 Python
对Matlab中共轭、转置和共轭装置的区别说明
2020/05/11 Python
Django restful framework生成API文档过程详解
2020/11/12 Python
纯CSS3代码实现switch滑动开关按钮效果
2016/08/30 HTML / CSS
高中毕业自我鉴定
2013/12/13 职场文书
金融专业大学生自我评价
2014/01/09 职场文书
岗位职责风险防控
2014/02/18 职场文书
个人廉洁自律承诺书
2014/03/27 职场文书
党员创先争优公开承诺书
2014/03/28 职场文书
促销活动总结
2014/04/28 职场文书
商务邀请函
2015/01/30 职场文书
追悼会悼词大全
2015/06/23 职场文书
利用Python第三方库实现预测NBA比赛结果
2021/06/21 Python
PHP遍历数组的6种方式总结
2021/11/17 PHP