这篇文章主要介绍了php中的函数前加&符号的作用分解,其作用叫做引用返回,有点抽象,详细解释请看本文内容,需要的朋友可以参考下  (转载)

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

function &chhua() {
static $b = "www.jb51.net"; //申明一个静态变量
$b = $b . "WEB开发";
echo $b;
return $b;
} $a = chhua(); //这条语句会输出 $b的值 为“www.jb51.netWEB开发”
$a = "PHP";
echo "<Br>";
$a = chhua(); //这条语 句会输出 $b的值 为“www.jb51.netWEB开发WEB开发”
echo "<Br>";
$a = &chhua(); //这条语句会输出 $b的值 为“www.jb51.netWEB开发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中函数前加&符号的作用分解的更多相关文章

  1. 成员变量和成员函数前加static的作用?

    成员变量和成员函数前加static的作用?答:它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数.分别用来反映类的状态.比如类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作 ...

  2. JAVA中代码前加@有什么作用

    严格说@符号并未在java 语言中作为操作符使用.而是在其他附属技术中使用比如1.javadoc 文档关键字/***  @author*  @version* @since* @see*/用于自动生成 ...

  3. 类中函数前、后、参数加const

    1.参数加const:int fun(const int a) a在函数里不可被修改 2.函数前加const:const int* const fun() 这种一般是返回的指针或者是引用,加const ...

  4. php函数前面加&符号 和 变量前面加&符号的意义

    php函数前面加&符号 和 变量前面加&符号的意义 php函数前面加&符号的意思是函数的引用返回,php函数前面加&符号有什么作用呢 function &tes ...

  5. C++在字符串前加一个L作用:

    在字符串前加一个L作用:    如 L"我的字符串" 表示将ANSI字符串转换成unicode的字符串,就是每个字符占用两个字节.    strlen("asd" ...

  6. C#中string类型前加@标志的作用

    转自:http://stackoverflow.com/questions/4879152/c-sharp-before-a-string   (stackoverflow) string字符串前加@ ...

  7. js文件中函数前加分号和感叹号是什么意思?

    本文转自:http://blog.csdn.net/h_o_w_e/article/details/51388500 !function(){}();   !有什么用? 从语法上来开,JavaScri ...

  8. php function 定义时函数名前加&符号的意义

    看了很多帖子,但是都不能理解,又去看了很多资料,终于名白了.记下备忘. 问题:php在声明函数时,函数名前面的&符号有什么用? 一直想不通.很多帖子说类似于变量的$a=&$b,但是$b ...

  9. 函数名前加 & 符号的深入理解 C++

    #include <iostream> using namespace std; int& test_str() { ; return a; //通过返回 a 的地址来进行 值的返 ...

随机推荐

  1. OracleL

    DDL  : Data Definition Language (DDL) statements are used to define the database structure or schema ...

  2. struts2 最新S2-016-S2-017漏洞通杀struts2所有版本及修复方法

    详情查看http://zone.wooyun.org/content/5159 官方漏洞说明 http://struts.apache.org/release/2.3.x/docs/s2-016.ht ...

  3. LogMiner学习笔记

    本文是个实战,没有讲太多理论的东西,如需详细理解Oracle LogMiner,请移步:LogMiner详细讲解 首先介绍一下我的oracle环境: 第一步: 确定LogMiner已经安装. 安装Lo ...

  4. BZOJ 1835: [ZJOI2010]base 基站选址 [序列DP 线段树]

    1835: [ZJOI2010]base 基站选址 题目描述 有N个村庄坐落在一条直线上,第i(i>1)个村庄距离第1个村庄的距离为Di.需要在这些村庄中建立不超过K个通讯基站,在第i个村庄建立 ...

  5. 最大流加强 dinic+当前弧优化

    qyy开始练习网络流啦 , 啊 ,蒟蒻只会套版 ,很裸的题 , 我连题都不想发了 ,可以参考我的代码(虽然我也是看的别人的 #include <iostream> #include < ...

  6. winform 分页 分类: WinForm 2014-05-16 15:30 257人阅读 评论(0) 收藏

    说明:(1)如果对分页的感兴趣的话,可以看一下我传的存储过程("SQL 存储过程 分页")               (2)分页,第一页.上一页,下一页.最后一页只调用点击(cl ...

  7. enum类型被intent所携带时需要注意的地方

    一般我们在Activity之间传递对象时多用Parcelable.比如写一个class,在这个class上标明implements Parcelable并实现接口就可以用Intent.putExtra ...

  8. [转][JAVA]定时任务之-Quartz使用篇

    [BAT][JAVA]定时任务之-Quartz使用篇 定时任务之-Quartz使用篇 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与 ...

  9. mysql默认用户名和密码

    默认用户名:root 密码:gree..

  10. Android热门网络框架Volley详解

    .Volley简介 volley的英文意思为‘群发’.‘迸发’.Volley是2013年谷歌官方发布的一款Android平台上的网络通信库.Volley非常适合一些数据量不大,但需要频繁通信的网络操作 ...