写点什么

【web 开发基础】PHP 中的引用参数的函数 (32)

作者:迷彩
  • 2022-11-23
    广东
  • 本文字数:1264 字

    阅读完需:约 4 分钟

前言

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()内部对传入的数组参数进行排序,父进程向该函数传入的数组变量也就会被改变

发布于: 刚刚阅读数: 8
用户头像

迷彩

关注

我的工作是常年写bug|公众号:编程架构之美 2020-06-18 加入

修bug的菜鸟~公众号:“互联网有啥事”已改名为“编程架构之美”

评论

发布
暂无评论
【web 开发基础】PHP中的引用参数的函数  (32)_web开发基础_迷彩_InfoQ写作社区