https://jingyan.baidu.com/article/f71d6037b18e3d1ab641d133.html
在做PHP开发时,我们经常在调用函数时,都是用值传递的,今天看到一个代码函数的参数有个变量前面有个‘&’符号,经过一番查找,学习,验证,研究,才知道这就是引用传递。
下面我们一起来了解,熟悉下这个引用传递。
方法/步骤
-
1
先看下我们的示例代码,如图,我们先定义一个方法,名字叫jingyan,参数都是用值传递。方法逻辑也很简单,对二个传进来的参数进行相加,然后把结果返回。
-
2
再定义一个方法,在这个方法里调用函数jingyan,然后把函数返回的结果,和其中一个参数输出显示。
-
3
运行页面,我们得到输出,结果正常。
-
4
这次,我们把jingyan方法的第二个参数由值传递,改成引用传递,在其参数名前面添加‘&’符号。代码如图
-
5
调用的方法没有改动,再次运行代码,看到结果如图。
从图中看到方法运行的结果没有变,还是31,但变量B却变了,定义这个变量时赋值是20,现在输出显示是21了。
为什么这样?这就是因为我们把方法改成引用传递的结果。
变量b是引用传递给方法的,在方法里,我们对参数b进行了加1操作,使得b的值变为21了,但这个参数b其实和方法外传递过来的变量b是指向同一个地方的,修改了参数b,变量b也会跟着改变。
-
6
换个角度解析,更清晰点,如图,当为引用传递时,变量b和参数b同时指向的内存块假设为p,当在函数里,参数b把原来的值加1变为21,则p由20变为21了,所以当输出变量b的值时,其实就是输出p的值,也是21。
-
7
为什么要使用引用传递?
这里就简单举例一个需要使用引用传递的场景。调用一个函数,只能有一个返回值,(除非你返回的是一个数组,数组里就可以包含多个值,但严格来说,这也是只能返回一个值,一个数组)。
但你调用函数,需要返回二个值时,使用引用传递就间接达到这个目的。因为我们调用一个函数后,变量b和c二个值都改变了。
END