php中函数前加&符号的作用分解


Posted in PHP onJuly 08, 2014

php变量前面加&符号是什么意思就不用多说了,大家都在用,就是两个变量同时指向一个地址而已,那么,php函数前面加&符号的意义又是什么呢?下面先上两个演示代码,然后再做解释。

function &chhua() 
{ 
static $b="3water.com";//申明一个静态变量 
$b=$b."WEB开发"; 
echo $b; 
return $b; 
} 
 
$a=chhua();//这条语句会输出 $b的值 为“3water.comWEB开发” 
$a="PHP"; 
echo "<Br>";
$a=chhua();//这条语 句会输出 $b的值 为“3water.comWEB开发WEB开发”  
echo "<Br>";
$a=&chhua();//这条语句会输出 $b的值 为“3water.comWEB开发WEB开发WEB开发” 
echo "<Br>";
$a="JS"; 
$a=chhua(); //这条语句会输出 $b的值 为"JSWEB开发"
 
 
function &test()
{
	static $b=0;//申明一个静态变量
	$b=$b+1;
	echo $b;
	return $b;
}
 
$a=test();//这条语句会输出 $b的值 为1
$a=5;
$a=test();//这 条语句会输出 $b的值 为2
$a=&test();//这条语句会输出 $b的值 为3
$a=5;
$a=test(); //这条语句会输出 $b的值 为6

下面就来解释一下第二个函数吧。
通过这种方式$a=test();得到的其实不是函数的引用返回,这跟普通的函数 调用没有区别.

至于原因: 这是PHP的规定
php规定通过$a=&test(); 方式得到的才是函数的引用返回.

至于什么是引用返回呢(PHP手册上说:引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。)

用上面的例子来解释就是
$a=test()方式调用函数,只是将函数的值赋给$a而已, 而$a做任何改 变 都不会影响到函数中的$b.
而通过$a=&test()方式调用函数呢, 他的作用是将return $b中的 $b变量的内存地址与$a变量的内存地址,
指向了同一个地方. 即产生了相当于这样的效果($a=&b;) 所以改变$a的值,也同时改变了$b 的值 ,所以在执行了:
$a=&test(); $a=5; 以后,$b的值变为了5。

PHP 相关文章推荐
从C/C++迁移到PHP——判断字符类型的函数
Oct 09 PHP
PHP中strtotime函数使用方法详解
Nov 27 PHP
PHP数据类型之整数类型、浮点数的介绍
Apr 28 PHP
浅析PHP中的UNICODE 编码与解码
Jun 29 PHP
PHP中魔术变量__METHOD__与__FUNCTION__的区别
Sep 29 PHP
帝国cms目录结构分享
Jul 06 PHP
ThinkPHP 模板引擎使用详解
May 07 PHP
详解PHP序列化和反序列化原理
Jan 15 PHP
PHP时间戳和日期相互转换操作实例小结
Dec 18 PHP
PHP去除空数组且数组键名重置的讲解
Feb 28 PHP
PHP中Session ID的实现原理实例分析
Aug 17 PHP
Yii框架 session 数据库存储操作方法示例
Nov 18 PHP
PHP实现的连贯操作、链式操作实例
Jul 08 #PHP
PHP类中的魔术方法(Magic Method)简明总结
Jul 08 #PHP
PHP的魔术常量__METHOD__简介
Jul 08 #PHP
PHP中的插件机制原理和实例
Jul 08 #PHP
phpmailer在服务器上不能正常发送邮件的解决办法
Jul 08 #PHP
php去掉URL网址中带有PHPSESSID的配置方法
Jul 08 #PHP
PHP大批量插入数据库的3种方法和速度对比
Jul 08 #PHP
You might like
PHP+XML 制作简单的留言本 图文教程
2009/11/02 PHP
php中使用sftp教程
2015/03/30 PHP
PHP使用ajax的post方式下载excel文件简单示例
2019/08/06 PHP
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
2013/11/22 Javascript
js/jquery解析json和数组格式的方法详解
2014/01/09 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
2016/03/21 Javascript
JavaScript中关于for循环删除数组元素内容时出现的问题
2016/11/21 Javascript
微信小程序 设置启动页面的两种方法
2017/03/09 Javascript
Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决
2018/01/27 Javascript
node.js博客项目开发手记
2018/03/16 Javascript
Node.js控制台彩色输出的方法与原理实例详解
2019/12/01 Javascript
javascript中的相等操作符(==与===区别)
2019/12/21 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
2020/12/10 Javascript
Python 调用VC++的动态链接库(DLL)
2008/09/06 Python
重命名批处理python脚本
2013/04/05 Python
python简单实现计算过期时间的方法
2015/06/09 Python
Python实现多线程抓取妹子图
2015/08/08 Python
Python性能提升之延迟初始化
2016/12/04 Python
浅谈python写入大量文件的问题
2018/11/09 Python
python实现名片管理系统
2018/11/29 Python
Django实现一对多表模型的跨表查询方法
2018/12/18 Python
对Python Pexpect 模块的使用说明详解
2019/02/14 Python
python3中利用filter函数输出小于某个数的所有回文数实例
2019/11/24 Python
python实现输入的数据在地图上生成热力图效果
2019/12/06 Python
python字符串下标与切片及使用方法
2020/02/13 Python
python 使用多线程创建一个Buffer缓存器的实现思路
2020/07/02 Python
在Python中字典按值排序的实现方法
2020/11/12 Python
PHP数据运算类型都有哪些
2013/11/05 面试题
Linux不知道文件后缀名怎么判断文件类型
2014/08/21 面试题
网络技术专业推荐信
2014/02/20 职场文书
人事行政经理岗位职责
2014/06/18 职场文书
意外死亡赔偿协议书
2014/10/14 职场文书
群众路线教育实践活动学习笔记内容
2014/11/06 职场文书
大学生暑假实习总结
2015/07/13 职场文书
孩子满月酒答谢词
2015/09/30 职场文书
创业计划书之暑假培训班
2019/11/09 职场文书