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 相关文章推荐
ip签名探针
Oct 09 PHP
PHP生成自定义长度随机字符串的函数分享
May 04 PHP
CI(CodeIgniter)框架介绍
Jun 09 PHP
php去掉文件前几行的方法
Jul 29 PHP
Symfony2 session用法实例分析
Feb 04 PHP
PHP的Laravel框架中使用消息队列queue及异步队列的方法
Mar 21 PHP
PHP格式化MYSQL返回float类型的方法
Mar 30 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
Jul 28 PHP
PHP大神的十大优良习惯
Sep 14 PHP
Thinkphp事务操作实例(推荐)
Apr 01 PHP
PHP 实现浏览记录并按日期分组
May 11 PHP
Bootstrap+PHP实现多图上传功能实例详解
Apr 08 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
MYSQL环境变量设置方法
2007/01/15 PHP
phpQuery占用内存过多的处理方法
2013/11/13 PHP
PHP实现关键字搜索后描红功能示例
2019/07/03 PHP
PHP 文件写入和读取操作实例详解【必看篇】
2019/11/04 PHP
一些常用且实用的原生JavaScript函数
2010/09/08 Javascript
jQuery写的日历(包括日历的样式及功能)
2013/04/23 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
2013/12/05 Javascript
深入理解JavaScript系列(42):设计模式之原型模式详解
2015/03/04 Javascript
JavaScript创建对象的方式小结(4种方式)
2015/12/17 Javascript
详解WordPress开发中get_current_screen()函数的使用
2016/01/11 Javascript
JavaScript中windows.open()、windows.close()方法详解
2016/07/28 Javascript
几种二级联动案例(jQuery\Array\Ajax php)
2016/08/13 Javascript
实例浅析js的this
2016/12/11 Javascript
nodejs之get/post请求的几种方式小结
2017/07/26 NodeJs
详解js静态资源文件请求的处理
2017/08/01 Javascript
Angular实现图片裁剪工具ngImgCrop实践
2017/08/17 Javascript
原生JS实现循环Nodelist Dom列表的4种方式示例
2018/02/11 Javascript
angularJS的radio实现单项二选一的使用方法
2018/02/28 Javascript
vue+webpack实现异步加载三种用法示例详解
2018/04/24 Javascript
微信小程序实现评论功能
2018/11/28 Javascript
VueJS 取得 URL 参数值的方法
2019/07/19 Javascript
微信小程序设置滚动条过程详解
2019/07/25 Javascript
微信小程序swiper实现文字纵向轮播提示效果
2020/01/21 Javascript
浅谈Python单向链表的实现
2015/12/24 Python
使用Python编写基于DHT协议的BT资源爬虫
2016/03/19 Python
Python实现网络端口转发和重定向的方法
2016/09/19 Python
浅谈Python NLP入门教程
2017/12/25 Python
python 获取等间隔的数组实例
2019/07/04 Python
使用OpenCV实现仿射变换—缩放功能
2019/08/29 Python
HTML5微信播放全屏问题的解决方法
2017/03/09 HTML / CSS
英国最大的化装舞会服装网站:Fancydress.com
2017/08/15 全球购物
亚洲在线旅行门户网站:Expedia.com.hk(智游网)
2020/04/14 全球购物
应届毕业生自我评价分享
2013/12/15 职场文书
《晏子使楚》教学反思
2014/02/08 职场文书
2014年销售经理工作总结
2014/12/01 职场文书
学术会议通知范文
2015/04/15 职场文书