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中的字符串函数
Oct 09 PHP
怎样才能成为PHP高手?学会“懒惰”的编程
Dec 05 PHP
PHP setcookie() cannot modify header information 的解决方法
Jan 09 PHP
PHP中HTML标签过滤技巧
Jan 07 PHP
php jsonp单引号转义
Nov 23 PHP
php中memcache 基本操作实例
May 17 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
Jun 21 PHP
PHP如何实现阿里云短信sdk灵活应用在项目中的方法
Jun 14 PHP
浅谈laravel框架sql中groupBy之后排序的问题
Oct 17 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
Dec 13 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
Apr 06 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
Mar 09 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之Memcache学习笔记
2013/06/17 PHP
使用PHP导出Word文档的原理和实例
2013/10/21 PHP
Server.HTMLEncode让代码在页面里显示为源代码
2013/12/08 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
2016/07/28 PHP
php生成图片缩略图功能示例
2017/02/22 PHP
PHP的PDO预定义常量讲解
2019/01/24 PHP
基于jquery实现状态限定编辑的代码
2012/02/11 Javascript
图片轮换效果实现代码(点击按钮停止执行)
2013/04/12 Javascript
使用CSS和jQuery模拟select并附提交后取得数据的代码
2013/10/18 Javascript
Angular2 (RC4) 路由与导航详解
2016/09/21 Javascript
JavaScript之实现一个简单的Vue示例
2019/01/17 Javascript
js array数组对象操作方法汇总
2019/03/18 Javascript
vue自定义组件(通过Vue.use()来使用)即install的用法说明
2020/08/11 Javascript
使用JS实现鼠标放上图片进行放大离开实现缩小功能
2021/01/27 Javascript
[35:26]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第三局
2016/02/26 DOTA
Python实现判断给定列表是否有重复元素的方法
2018/04/11 Python
Python批量删除只保留最近几天table的代码实例
2019/04/01 Python
python实现微信每日一句自动发送给喜欢的人
2019/04/29 Python
python3 pillow模块实现简单验证码
2019/10/31 Python
Python查找不限层级Json数据中某个key或者value的路径方式
2020/02/27 Python
django之从html页面表单获取输入的数据实例
2020/03/16 Python
matplotlib 三维图表绘制方法简介
2020/09/20 Python
一款纯css3实现的鼠标经过按钮特效教程
2014/11/09 HTML / CSS
国际知名军事风格休闲装品牌:Alpha Industries(阿尔法工业)
2017/05/24 全球购物
New Balance澳大利亚官网:运动鞋和健身服装
2019/02/23 全球购物
Talbots官网:美国成熟女装品牌
2019/11/15 全球购物
销售行政专员职责
2014/01/03 职场文书
团日活动策划书
2014/02/01 职场文书
教师批评与自我批评总结
2014/10/16 职场文书
2015年仓管员工作总结
2015/04/21 职场文书
刘胡兰观后感
2015/06/16 职场文书
学校食堂管理制度
2015/08/04 职场文书
2016小学教师读书心得体会
2016/01/13 职场文书
青年教师听课心得体会
2016/01/15 职场文书
导游词之北京明十三陵
2019/10/28 职场文书
JS Canvas接口和动画效果大全
2021/04/29 Javascript