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+DBM的同学录程序(4)
Oct 09 PHP
php与mysql建立连接并执行SQL语句的代码
Jul 04 PHP
PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
Jul 15 PHP
php写入数据到CSV文件的方法
Mar 14 PHP
PHP设计模式之观察者模式实例
Feb 22 PHP
php数组分页实现方法
Apr 30 PHP
PHP 常用时间函数资料整理
Oct 22 PHP
Yii2选项卡的简单使用
May 26 PHP
PHP实现会员账号单唯一登录的方法分析
Mar 07 PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
Aug 03 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
Sep 19 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
Apr 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 mail 通过Windows的SMTP发送邮件失败的解决方案
2009/05/27 PHP
Discuz 6.0+ 批量注册用户名
2009/09/13 PHP
ThinkPHP实现简单登陆功能
2017/04/28 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
2019/10/14 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
jQuery 技巧小结
2010/04/02 Javascript
Jquery知识点二 jquery下对数组的操作
2011/01/15 Javascript
JS实现的网页背景闪电闪烁效果代码
2015/10/17 Javascript
JS限定手机版中图片大小随分辨率自动调整的方法
2016/12/05 Javascript
JavaScript数据结构学习之数组、栈与队列
2017/05/02 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
2017/06/09 Javascript
webpack3之loader全解析
2017/10/26 Javascript
JS加密插件CryptoJS实现AES加密操作示例
2018/08/16 Javascript
Vue批量图片显示时遇到的路径被解析问题
2019/03/28 Javascript
关于Vue源码vm.$watch()内部原理详解
2019/04/26 Javascript
[02:51]DOTA2英雄基础教程 艾欧
2014/01/13 DOTA
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
2015/04/11 Python
浅谈python对象数据的读写权限
2016/09/12 Python
Python编程之字符串模板(Template)用法实例分析
2017/07/22 Python
浅谈Django REST Framework限速
2017/12/12 Python
解决python 输出是省略号的问题
2018/04/19 Python
python+selenium打印当前页面的titl和url方法
2018/06/22 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
2019/03/14 Python
解决django后台管理界面添加中文内容乱码问题
2019/11/15 Python
使用Python 自动生成 Word 文档的教程
2020/02/13 Python
Python爬虫Scrapy框架CrawlSpider原理及使用案例
2020/11/20 Python
Python中对象的比较操作==和is区别详析
2021/02/12 Python
详解html2canvas截图不能截取圆角图片的解决方案
2018/01/30 HTML / CSS
加拿大鞋网:Globo Shoes
2019/12/26 全球购物
国贸专业的职业规划范文
2014/01/23 职场文书
优秀小学生家长评语
2014/01/30 职场文书
《兰亭集序》教学反思
2014/02/11 职场文书
乡村卫生服务一体化管理实施方案
2014/03/30 职场文书
公司总经理任命书
2014/06/05 职场文书
2014年平安建设工作总结
2014/11/19 职场文书