当前位置 : 主页 > 网络编程 > PHP >

PHP中的引用参数的函数

来源:互联网 收集:自由互联 发布时间:2023-09-03
前言 php的引用(就是在变量或者函数、对象等前面加上符号) 在PHP 中引用的意思是:不同的名字访问同一个变量内容。与C语言中的指针是有差别的。C语言中的指针里面存储的是变

前言

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;

执行结果:

PHP中的引用参数的函数_数组

引用参数的函数

在上面的例子中,调用 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;

执行结果如下:

PHP中的引用参数的函数_数组_02

在上面的实例中,调用 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);

执行结果如下:

PHP中的引用参数的函数_php_03

从运行结果可以看出使用sort()函数成功对数组$array进行了排序,只需要直接将数组变量$array作为参数调用sort()函数处理,原数组就是排序后的顺序。因为sort()使用的是一个引用参数,所以sort()内部对传入的数组参数进行排序,父进程向该函数传入的数组变量也就会被改变

【文章转自:新加坡服务器 http://www.558idc.com/sin.html 复制请保留原URL】
上一篇:PHP的laravel框架实现uni-app个推(Uni Push)
下一篇:没有了
网友评论