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模块 Memcached功能多于Memcache
Jun 14 PHP
深入理解php的MySQL连接类
Jun 07 PHP
php 中文字符串首字母的获取函数分享
Nov 04 PHP
php通过session防url攻击方法
Dec 10 PHP
php导入大量数据到mysql性能优化技巧
Dec 29 PHP
php在数组中查找指定值的方法
Mar 17 PHP
PHP整合七牛实现上传文件
Jul 03 PHP
PHP使用curl模拟post上传及接收文件的方法
Mar 04 PHP
php遍历替换目录下文件指定内容的方法
Nov 10 PHP
基于PHP实现的多元线性回归模拟曲线算法
Jan 30 PHP
laravel validate 设置为中文的例子(验证提示为中文)
Sep 29 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高级OOP技术演示
2009/08/27 PHP
php程序的国际化实现方法(利用gettext)
2011/08/14 PHP
PHP设计模式 注册表模式(多个类的注册)
2012/02/05 PHP
PHP中集成PayPal标准支付的实现方法分享
2012/02/06 PHP
PHP实现下载断点续传的方法
2014/11/12 PHP
php 伪造HTTP_REFERER页面URL来源的三种方法
2016/09/22 PHP
php删除txt文件指定行及按行读取txt文档数据的方法
2017/01/30 PHP
php实现将数据做成json的格式给前端使用
2018/08/21 PHP
PHP获取当前系统时间的方法小结
2018/10/03 PHP
ThinkPHP5.1表单令牌Token失效问题的解决
2019/03/22 PHP
AngularJS初始化静态模板详解
2016/01/14 Javascript
理解JavaScript事件对象
2016/01/25 Javascript
Vue实现百度下拉提示搜索功能
2017/06/21 Javascript
JS中的回调函数实例浅析
2018/03/21 Javascript
详解vue-router 初始化时做了什么
2018/06/11 Javascript
ES6知识点整理之对象解构赋值应用示例
2019/04/17 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
微信小程序自定义tabbar custom-tab-bar 6s出不来解决方案(cover-view不兼容)
2019/11/01 Javascript
koa2的中间件功能及应用示例
2020/03/05 Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
2020/05/27 Javascript
[43:57]Liquid vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
浅析python 中__name__ = '__main__' 的作用
2014/07/05 Python
利用Python的Django框架生成PDF文件的教程
2015/07/22 Python
pytorch载入预训练模型后,实现训练指定层
2020/01/06 Python
pytorch 移动端部署之helloworld的使用
2020/10/30 Python
CSS3实现淘宝留白的方法
2020/06/05 HTML / CSS
Speedo速比涛中国官方网站:全球领先泳装运动品牌
2018/04/24 全球购物
当我正在为表建立索引的时候,SQL Server 会禁止对表的访问吗
2014/04/28 面试题
事业单位请假制度
2014/01/13 职场文书
土木建筑学生自我评价
2014/01/14 职场文书
《桂林山水》教学反思
2014/02/08 职场文书
物理学专业自荐信
2014/06/11 职场文书
高中教师个人工作总结
2015/02/10 职场文书
英语教师求职信范文
2015/03/20 职场文书
2016年优秀少先队辅导员事迹材料
2016/02/26 职场文书
基于Apache Hudi在Google云构建数据湖平台的思路详解
2022/04/07 Servers