前言
php的引用(就是在变量或者函数、对象等前面加上&符号)
在PHP 中引用的意思是:不同的名字访问同一个变量内容。与C语言中的指针是有差别的。C语言中的指针里面存储的是变量的内容在内存中存放的地址,函数的引用返回多用在对象中
引用参数的函数格式说明如下代码所示:
void funName (array &args) 在参数列表中使用&描述参数
在PHP中默认是按值传递,而且函数的参数也属于局部变量,所以即使在函数内部改变参数的值,它并不会改变函数外部的值。函数为子程序,调用函数的程序可以称为父程序。父程序直接传递指定的值或变量给函数使用。由于传递的值或者变量与函数里的数值分别存储与不同的内存区块,所以如果函数对所导入的数值做了任何变动,并不会对父程序造成直接影响。
如下面代码所示:
<?php
/**
* demo1
* @param int $arg
*/
function demo1($arg){
$arg = 800;
}
$val = 300;
demo1($val);
echo $val;
执行结果:
引用参数的函数
在上面的例子中,调用 demo1()函数时,将全局变量$val 的值传给函数 demo1()。虽然在 demo1()函数中对变量$val指定了新的值800,但是并不能改变函数外变量$val的值。 调用 demo1()函数结束以后,变量 $val输出的值仍为300。如果希望允许函数修改它的参数值,则必须通过引用传递参数。
相对于值传递模式,并不会将父程序中的指定数值或者目标变量传递给函数,而是把该数值或者变量的内存存储区块相对地址导入函数之中。因此,当该数值在函数中有任何的变动时,会连带对父程序造成影响。如果想要函数的一个参数总是通过引用传递,则在函数定义中,在参数的前面预先加上&符号。这时我们只需要对上面的函数稍作修改即可:
<?php
/**
* demo1
* @param int $arg
*/
function demo1(&$args){
$args = 800;
}
$val = 300;
demo1($val);
echo $val;
执行结果如下:
在上面的实例中,调用 demo1()函数时,不是将全局变量$val 的值传给函数 demo1()。而是在demo1()函数的定义中,使用了引用符号 & 将指定变量$val为按引用传递方式。在函数体中对变量$args指定了新的值800,由于按引用方式会修改外部数据,所以外部变量$val的值也一起被修改。函数调用结束以后,可以看到变量$val的输出的结果为:800
注:如果在函数的形参中有使用 & 修饰参数。则在调用该函数时就必须传入一个变量给这个参数,而不能传递一个值
在PHP的系统函数中有很多这样的函数,都需要传递一个变量给引用参数,在函数中改变参数变量的值,则传递的这个参数变量本身的值也会在父程序中被改变。比如:在数组处理函数中的next(),sort(),shuffle(),key()等函数都是引用参数的函数。接下来我们看看sort()排序函数怎么使用:
<?php
$array = array(12,35,67,45,23,25,16,8);
print_r($array);
sort($array);
var_dump($array);
执行结果如下:
从运行结果可以看出使用sort()函数成功对数组$array进行了排序,只需要直接将数组变量$array作为参数调用sort()函数处理,原数组就是排序后的顺序。因为sort()使用的是一个引用参数,所以sort()内部对传入的数组参数进行排序,父进程向该函数传入的数组变量也就会被改变
标签:变量,val,demo1,参数,引用,PHP,函数 From: https://blog.51cto.com/micai01/6221121