【web 开发基础】PHP 中的引用参数的函数 (32)
前言
php 的引用(就是在变量或者函数、对象等前面加上 &符号)
在 PHP 中引用的意思是:不同的名字访问同一个变量内容。与C语言中的指针是有差别的。C语言中的指针里面存储的是变量的内容在内存中存放的地址,函数的引用返回多用在对象中
引用参数的函数格式说明如下代码所示:
void funName (array &args) 在参数列表中使用 &描述参数
在 PHP 中默认是按值传递,而且函数的参数也属于局部变量,所以即使在函数内部改变参数的值,它并不会改变函数外部的值。函数为子程序,调用函数的程序可以称为父程序。父程序直接传递指定的值或变量给函数使用。由于传递的值或者变量与函数里的数值分别存储与不同的内存区块,所以如果函数对所导入的数值做了任何变动,并不会对父程序造成直接影响。
如下面代码所示:
执行结果:
引用参数的函数
在上面的例子中,调用 demo1()函数时,将全局变量 $val 的值传给函数 demo1()。虽然在 demo1()函数中对变量 $val 指定了新的值 800,但是并不能改变函数外变量 $val 的值。 调用 demo1()函数结束以后,变量 $val 输出的值仍为 300。如果希望允许函数修改它的参数值,则必须通过引用传递参数。
相对于值传递模式,并不会将父程序中的指定数值或者目标变量传递给函数,而是把该数值或者变量的内存存储区块相对地址导入函数之中。因此,当该数值在函数中有任何的变动时,会连带对父程序造成影响。如果想要函数的一个参数总是通过引用传递,则在函数定义中,在参数的前面预先加上 &符号。这时我们只需要对上面的函数稍作修改即可:
执行结果如下:
在上面的实例中,调用 demo1()函数时,不是将全局变量 $val 的值传给函数 demo1()。而是在 demo1()函数的定义中,使用了引用符号 & 将指定变量 $val 为按引用传递方式。在函数体中对变量 $args 指定了新的值 800,由于按引用方式会修改外部数据,所以外部变量 $val 的值也一起被修改。函数调用结束以后,可以看到变量 $val 的输出的结果为:800
注:如果在函数的形参中有使用 & 修饰参数。则在调用该函数时就必须传入一个变量给这个参数,而不能传递一个值
在 PHP 的系统函数中有很多这样的函数,都需要传递一个变量给引用参数,在函数中改变参数变量的值,则传递的这个参数变量本身的值也会在父程序中被改变。比如:在数组处理函数中的 next(),sort(),shuffle(),key()等函数都是引用参数的函数。接下来我们看看 sort()排序函数怎么使用:
执行结果如下:
从运行结果可以看出使用 sort()函数成功对数组 $array 进行了排序,只需要直接将数组变量 $array 作为参数调用 sort()函数处理,原数组就是排序后的顺序。因为 sort()使用的是一个引用参数,所以 sort()内部对传入的数组参数进行排序,父进程向该函数传入的数组变量也就会被改变
版权声明: 本文为 InfoQ 作者【迷彩】的原创文章。
原文链接:【http://xie.infoq.cn/article/1587ecd996ae2b414a24ecd80】。文章转载请联系作者。
评论