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会员权限控制实现原理分析
May 29 PHP
php 伪造本地文件包含漏洞的代码
Nov 03 PHP
解析如何用php screw加密php源代码
Jun 20 PHP
解析php下载远程图片函数 可伪造来路
Jun 25 PHP
php实现的发送带附件邮件类实例
Sep 22 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
Aug 18 PHP
YII2 实现多语言配置的方法分享
Jan 11 PHP
详解PHP字符串替换str_replace()函数四种用法
Oct 13 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
Mar 02 PHP
php处理多图上传压缩代码功能
Jun 13 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
Feb 15 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
Aug 27 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函数spl_autoload_register()用法和__autoload()介绍
2012/02/04 PHP
php遍历文件夹下的所有文件和子文件夹示例
2014/03/20 PHP
php打包压缩文件之ZipArchive方法用法分析
2016/04/30 PHP
php自定义函数转换html标签示例
2016/09/29 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
在js文件中如何获取basePath处理js路径问题
2013/07/10 Javascript
jquery插件jquery.nicescroll实现图片无滚动条左右拖拽的方法
2015/08/10 Javascript
Javascript验证方法大全
2015/09/21 Javascript
javascript性能优化之DOM交互操作实例分析
2015/12/12 Javascript
js判断鼠标位置是否在某个div中的方法
2016/02/26 Javascript
jQuery Easyui DataGrid点击某个单元格即进入编辑状态焦点移开后保存数据
2016/08/15 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
利用jqprint插件打印页面内容的实现方法
2018/01/09 Javascript
[03:43]TI9战队采访——PSG.LGD
2019/08/22 DOTA
Python内置函数bin() oct()等实现进制转换
2012/12/30 Python
Python使用minidom读写xml的方法
2015/06/03 Python
Python实现类似比特币的加密货币区块链的创建与交易实例
2018/03/20 Python
python爬虫之xpath的基本使用详解
2018/04/18 Python
Numpy数据类型转换astype,dtype的方法
2018/06/09 Python
Django模型修改及数据迁移实现解析
2019/08/01 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
2020/01/16 Python
Python正则re模块使用步骤及原理解析
2020/08/18 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
2021/01/29 Python
基于HTML5 audio元素播放声音jQuery小插件
2011/05/11 HTML / CSS
ECCO爱步美国官网:来自丹麦的鞋履品牌
2016/11/23 全球购物
NYX Professional Makeup俄罗斯官网:世界知名的化妆品品牌
2019/12/26 全球购物
Elizabeth Gage官网:英国最好的珠宝设计之一
2020/09/26 全球购物
高二历史教学反思
2014/01/25 职场文书
2014年调度员工作总结
2014/11/19 职场文书
会议承办单位欢迎词
2015/09/30 职场文书
高中化学教学反思
2016/02/22 职场文书
MySQL查看表和清空表的常用命令总结
2021/05/26 MySQL
分享7个 Python 实战项目练习
2022/03/03 Python
【js设计模式】SOLID五大设计原则
2022/03/24 Javascript
springboot读取nacos配置文件
2022/05/20 Java/Android