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.ini中添加extension=php_mysqli.dll指令的说明
Jun 14 PHP
php 什么是PEAR?(第三篇)
Mar 19 PHP
最新的php 文件上传模型,支持多文件上传
Aug 13 PHP
php将gd生成的图片缓存到memcache的小例子
Jun 05 PHP
Linux下安装oracle客户端并配置php5.3
Oct 12 PHP
php的dl函数用法实例
Nov 06 PHP
php文件压缩之PHPZip类用法实例
Jun 18 PHP
dvwa+xampp搭建显示乱码的问题及解决方案
Aug 23 PHP
PHP编写文件多服务器同步程序
Jul 02 PHP
jquery不支持toggle()高(新)版本的问题解决
Sep 24 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
PHP实现浏览器中直接输出图片的方法示例
Mar 14 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 Array交叉表实现代码
2010/08/05 PHP
浅析PHP原理之变量(Variables inside PHP)
2013/08/09 PHP
PHP使用PHPMailer发送邮件的简单使用方法
2013/11/12 PHP
PHP中的函数声明与使用详解
2017/05/27 PHP
PDO::query讲解
2019/01/29 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
javascript 限制输入和粘贴(IE,firefox测试通过)
2008/11/14 Javascript
jquery autocomplete自动完成插件的的使用方法
2010/08/07 Javascript
扩展jquery实现客户端表格的分页、排序功能代码
2011/03/16 Javascript
js写一个弹出层并锁屏效果实现代码
2012/12/07 Javascript
jquery滚动条插件jScrollPane的使用介绍
2013/11/08 Javascript
javascript实现动态侧边栏代码
2014/02/19 Javascript
编写简单的jQuery提示插件
2014/12/21 Javascript
Spring mvc 接收json对象
2015/12/10 Javascript
jQuery+css实现的时钟效果(兼容各浏览器)
2016/01/27 Javascript
基于LayUI分页和LayUI laypage分页的使用示例
2017/08/02 Javascript
基于node.js实现微信支付退款功能
2017/12/19 Javascript
elementui的默认样式修改方法
2018/02/23 Javascript
浅谈Angular HttpClient简单入门
2018/05/04 Javascript
Vue SPA单页应用首屏优化实践
2018/06/28 Javascript
微信小程序自定义底部导航带跳转功能
2018/11/27 Javascript
JavaScript生成随机验证码代码实例
2019/09/28 Javascript
CKEditor扩展插件:自动排版功能autoformat插件实现方法详解
2020/02/06 Javascript
Python3遍历目录树实现方法
2015/05/22 Python
使用paramiko远程执行命令、下发文件的实例
2017/10/01 Python
利用Python进行异常值分析实例代码
2017/12/07 Python
TensorFlow模型保存和提取的方法
2018/03/08 Python
pandas值替换方法
2018/07/10 Python
将python字符串转化成长表达式的函数eval实例
2020/05/11 Python
波兰家具和室内装饰品购物网站:Vivre
2018/04/10 全球购物
Currentbody德国站:健康与美容技术专家
2020/04/05 全球购物
什么是View State?
2013/01/27 面试题
某公司C#程序员面试题笔试题
2014/05/26 面试题
劲霸男装广告词改编版
2014/03/21 职场文书
写给妈妈的感谢信
2015/01/22 职场文书
python利用pandas分析学生期末成绩实例代码
2021/07/09 Python