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 相关文章推荐
php注入实例
Oct 09 PHP
使用sockets:从新闻组中获取文章(二)
Oct 09 PHP
PHP 5.0 Pear安装方法
Dec 06 PHP
PHP 执行系统外部命令 system() exec() passthru()
Aug 11 PHP
PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
Jul 01 PHP
解析Win7 XAMPP apache无法启动的问题
Jun 26 PHP
ThinkPHP分组下自定义标签库实例
Nov 01 PHP
php实现的mongodb操作类实例
Apr 03 PHP
php结合ACCESS的跨库查询功能
Jun 12 PHP
详解HTTP Cookie状态管理机制
Jan 14 PHP
Laravel框架模板继承操作示例
Jun 11 PHP
浅谈php调用python文件
Mar 29 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+Ajax实时自动检测是否联网的方法
2015/07/01 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
2015/10/13 PHP
jQuery Lightbox 图片展示插件使用说明
2010/04/25 Javascript
Ext 今日学习总结
2010/09/19 Javascript
Javascript实现滑块滑动改变值的实现代码
2013/04/12 Javascript
javascript间隔定时器(延时定时器)学习 间隔调用和延时调用
2014/01/13 Javascript
轻松创建nodejs服务器(5):事件处理程序
2014/12/18 NodeJs
JavaScript常用标签和方法总结
2015/09/01 Javascript
整理JavaScript创建对象的八种方法
2015/11/03 Javascript
超详细的JS弹出窗口代码大全
2020/04/18 Javascript
史上最全JavaScript数组去重的十种方法(推荐)
2017/08/17 Javascript
Angularjs中date过滤器失效的问题及解决方法
2018/07/06 Javascript
关于vue项目中搜索节流的实现代码
2019/09/17 Javascript
BootStrap前端框架使用方法详解
2020/02/26 Javascript
[04:12]第二届DOTA2亚洲邀请赛选手传记-Newbee.Sccc
2017/04/03 DOTA
[03:30]DOTA2完美“圣”典精彩集锦
2016/12/27 DOTA
[01:20]DOTA2 2017国际邀请赛冠军之路无止竞
2017/06/19 DOTA
在Django的URLconf中使用多个视图前缀的方法
2015/07/18 Python
Python实现的朴素贝叶斯分类器示例
2018/01/06 Python
python针对excel的操作技巧
2018/03/13 Python
Python读写及备份oracle数据库操作示例
2018/05/17 Python
python自动化报告的输出用例详解
2018/05/30 Python
python 按不同维度求和,最值,均值的实例
2018/06/28 Python
Numpy之文件存取的示例代码
2018/08/03 Python
Python生成器generator用法示例
2018/08/10 Python
Python django框架应用中实现获取访问者ip地址示例
2019/05/17 Python
关于Python 中的时间处理包datetime和arrow的方法详解
2020/03/19 Python
python获取响应某个字段值的3种实现方法
2020/04/30 Python
Python ckeditor富文本编辑器代码实例解析
2020/06/22 Python
css3 利用transform打造走动的2D时钟
2020/10/20 HTML / CSS
艺术学院毕业生自荐信
2014/07/05 职场文书
学校总务处领导干部个人对照检查材料思想汇报
2014/10/06 职场文书
房屋认购协议书
2015/01/29 职场文书
公司奖励通知
2015/04/21 职场文书
2016年119消防宣传日活动总结
2016/04/05 职场文书
解决tk mapper 通用mapper的bug问题
2021/06/16 Java/Android