Rumah >pembangunan bahagian belakang >tutorial php >php自定义函数的参数在函数间传递的三种方式详解

php自定义函数的参数在函数间传递的三种方式详解

伊谢尔伦
伊谢尔伦asal
2017-05-04 15:32:5714077semak imbas

在调用函数时,需要向函数传递参数,被传入的参数成为实参,而函数定义时的参数为形参。上一章节我们对php自定义函数的参数进行了实例讲解,本章节就重点介绍一下函数间参数传递的3种方式:按照值传递按引用传递默认参数

1.按值传递的方式

将实参的值赋值到对应的形参中,在函数内部的操作针对形参进行,操作的结果不会影响到实参,即函数返回后,实参的值不会改变。值传递(pass-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。

 首先定义一个函数 example(), 功能是将传入的参数值做一些运算后在输出;接着在函数外部定义一个变量$m,也就是实参;最后调用函数 example($m)。分别在函数体内和体外输出形参 $m 和 实参 $m 的值。

其实例代码如下的显示

<?php
 function example($m){
   $m = $m + 10;
   echo "在函数内部:m = ".$m ."<br>";  //输出形参的值
 }
 $m = 1;
 example($m);                  // 将实参$m的值传递给形参$m
 echo "在函数外部:m = ".$m;         // 实参的值没有变化,$m = 1
?>

函数的运行结果如下图:

149.png

2. 按引用传递方式

按引用传递就是将实参的内存地址传递给形参。这时,在函数内部所有对形参的操作都会影响到实参的值。函数返回后,实参的值会发生变化。引用传递方式就是函数定义时在形参前面加上 “ & ” 符号。引用传递(pass-by-reference)过程中,被调函数的形式参数虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。

代码示例如下所示:

<?php
function example(&$m){             //定义一个函数,同时传递参数$m的地址
 $m = $m + 10;
 echo "在函数内部:m = ".$m ."<br>";  //输出形参的值
}
$m = 1;
example($m);                   // 将实参$m的地址传递给形参$m
echo "在函数外部:m = ".$m;         // 实参的值发生了变化,$m = 11
?>

函数的运行结果如下图:

150.png

3. 默认参数(可选参数)

还有一种设置参数的方式,即可选参数。可以指定某个参数为可选参数,将可选参数放在参数列表末尾,并且指定其默认值为空。

应用一个例子使用可选参数实现一个简单的价格计算功能。设置自定义函数 values 的参数 $tax 为可选参数,其默认值为空。 第一次调用该函数,并且给参数 $tax 赋值,输出价格;第二次调用该函数,不给参数复制,输出价格。

其代码如下所示:

<?php
function value($price, $tax=""){     //定义一个函数,第二个参数为空
 $price = $price*$tax;
 echo "价格:$price<br>";   //输出价格
}
value(10,5);            // 为可选参数赋值5
value(10);              // 没有给可选参数赋值
?>

输出结果为:

价格:50

价格:0

注意:当使用默认参数时,默认参数必须放在非默认参数的右侧,否则函数可能出错。

说明:从PHP5 开始,默认值也可以通过引用传递。下面一章将介绍什么是自定义函数的返回值

【相关教程推荐】

1. 《php.cn独孤九贱(4)-php视频教程

2.  php编程从入门到精通全套视频教程

3.  php实战视频教程

Atas ialah kandungan terperinci php自定义函数的参数在函数间传递的三种方式详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn