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相关资料
Oct 09 PHP
php的计数器程序
Oct 09 PHP
php获取目录所有文件并将结果保存到数组(实例)
Oct 25 PHP
PHP高手需要要掌握的知识点
Aug 21 PHP
PHP中使用imagick生成PSD文件缩略图教程
Jan 26 PHP
PHP程序员的技术成长规划
Mar 25 PHP
关于php中一些字符串总结
May 05 PHP
Yii2实现多域名跨域同步登录退出
Feb 04 PHP
PHP实现登录注册之BootStrap表单功能
Sep 03 PHP
在laravel框架中使用model层的方法
Oct 08 PHP
php面向对象基础详解【星际争霸游戏案例】
Jan 23 PHP
50个优秀经典PHP算法大集合 附源码
Aug 26 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实现带读写分离功能的MySQL类完整实例
2016/07/28 PHP
PHP实现QQ快速登录的方法
2016/09/28 PHP
降低PHP Redis内存占用
2017/03/23 PHP
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
2010/06/02 Javascript
document.createElement()用法及注意事项(ff下不兼容)
2013/03/13 Javascript
JS获取文本框,下拉框,单选框的值的简单实例
2014/02/26 Javascript
js实现的倒计时按钮实例
2015/06/24 Javascript
jquery实现图片上传前本地预览功能
2016/05/10 Javascript
关于动态生成dom绑定事件失效的原因及解决方法
2016/08/06 Javascript
AngularJS 与百度地图的结合实例
2016/10/20 Javascript
BootStrap 实现各种样式的进度条效果
2016/12/07 Javascript
javascript自执行函数
2017/02/10 Javascript
webpack3+React 的配置全解
2017/08/21 Javascript
mint-ui 时间插件使用及获取选择值的方法
2018/02/09 Javascript
vue 组件中slot插口的具体用法
2018/04/03 Javascript
npm全局模块卸载及默认安装目录修改方法
2018/05/15 Javascript
JavaScript函数重载操作实例浅析
2020/05/02 Javascript
vue实现页面切换滑动效果
2020/06/29 Javascript
vue组件实现移动端九宫格转盘抽奖
2020/10/16 Javascript
python Django模板的使用方法(图文)
2013/11/04 Python
Python中的装饰器用法详解
2015/01/14 Python
Python 使用SMTP发送邮件的代码小结
2016/09/21 Python
Django中间件拦截未登录url实例详解
2019/09/03 Python
英国书籍、CD、DVD和游戏的第一道德零售商:Awesome Books
2020/02/22 全球购物
应届大学生简历中的自我评价
2014/01/15 职场文书
新员工入职感言
2014/02/01 职场文书
公司管理建议书范文
2014/03/12 职场文书
cf收人广告词大全
2014/03/14 职场文书
负责人任命书范本
2014/06/04 职场文书
国庆节活动总结
2014/08/26 职场文书
单位一把手群众路线四风问题整改措施
2014/09/25 职场文书
个人工作总结范文2014
2014/11/07 职场文书
2016春季校长开学典礼致辞
2015/11/26 职场文书
关于MybatisPlus配置双数据库驱动连接数据库问题
2022/01/22 Java/Android
【海涛教你打DOTA】虚空假面第一视角骨弓3房29杀
2022/04/01 DOTA
tree shaking对打包体积优化及作用
2022/07/07 Java/Android