6.2 参数和返回值
用户可以通过参数和返回值与函数交换数据,本节将介绍具体情况。
6.2.1 在函数中传递参数
在PHP函数中,参数传递可以分为值传递和引用传递(也称为地址传递)两种情况。
1.值传递参数
默认情况下,PHP实行按值传递参数。值传递指调用函数时将常量或变量的值(通常称其为实参)传递给函数的参数(通常称其为形参)。值传递的特点是实参与形参分别存储在内存中,是两个不相关的独立变量。因此,在函数内部改变形参的值时,实参的值一般是不会改变的。6.1.2小节介绍的实例都属于按值传递参数的情况。
2.引用传递参数
引用传递(按地址传递)的特点是实参与形参共享一块内存。因此,当形参的值改变的时候,实参的值也会相应地做出改变。从这种角度上来说,可以认为形参和实参是同一个变量。
在定义引用传递参数时,可以在参数前面加上引用符号&。
【例6-11】 一个使用引用传递参数的例子。
<?PHP
function printString(&$string) {
echo($string);
$string = "打印完成!";
}
$str = "测试字符串!<BR>";
printString($str);
echo($str);
?>
在函数printString()中,定义了一个引用传递参数$string。在函数体中,首先调用echo()函数打印变量$string ,然后将变量$string 的值设置为“打印完成!”。使用变量$str 作为实参调用printString($str),调用完成后,打开变量$str的值。运行结果如下:
测试字符串!
打印完成!
可以看到,在作为实参调用printString()函数后,变量$str的值已经发生了改变。
3.参数的默认值
在PHP中,可以为函数的参数设置默认值。可以在定义函数时,直接在参数后面使用“=”为其赋值。
【例6-12】 设置参数默认值的例子。
<?PHP
function printString($string = "This is a string!") {
echo($string);
}
printString();
$str = "<BR>测试字符串! ";
printString($str);
?>
函数printString()的参数$string有一个默认值“This is a string!”,如果在调用函数时没有指定参数,则将默认值作为参数的值。在例 6-12 中,两次调用 printString()函数,一次没有参数,一次使用参数“<BR>测试字符串!”。运行结果如下:
This is a string!
测试字符串!
4.可变长参数
PHP还支持可变长度的参数列表。在定义函数时,不指定参数。在调用函数时,可以根据需要指定参数的数量,通过与参数相关的几个系统函数获取参数信息。具体说明如下:
• func_num_args:返回传递给函数的参数数量;
• func_get_arg:返回传递给函数的参数列表;
• func_get_args:返回一个数组,由函数的参数组成。
【例6-13】 一个可变长参数的实例。
<?PHP
function mysum() {
$num = func_num_args();
echo("函数包含:" . $num . "个参数<br>");
$sum = 0;
for($i=0; $i<$num; $i++) {
$sum = $sum + func_get_arg($i);
}
echo("参数累加之和为:" . $sum);
}
mysum(1, 2, 3, 4);
?>
自定义函数mysum()在定义时没有指定参数。在函数体中使用func_num_args()函数获取调用函数时传递的参数数量,然后使用for语句将每个参数值都累加到变量$sum中,并打印累加的结果。在下面的程序中,使用1、2、3、4作为参数调用mysum()函数。运行结果如下:
函数包含:4个参数
参数累加之和为:10
【例6-14】 修改例6-13,使用func_get_args函数获取参数信息,代码如下:
<?PHP
function sum1() {
$num = func_num_args();
echo("函数包含:" . $num . "个参数<br>");
$sum = 0;
$arg_list = func_get_args();
for($i=0; $i<$num; $i++) {
$sum = $sum + $arg_list[$i];
}
echo("参数累加之和为:" . $sum);
}
sum1(1, 2, 3, 4);
?>
运行结果与例6-13相同。
6.2.2 函数的返回值
可以为函数指定一个返回值,返回值可以是任何数据类型,使用return语句可以返回函数值并退出函数。
【例6-15】 对例6-13 中的mysum()函数进行改造,通过函数的返回值返回累加结果,代码如下:
<?PHP
function mysum() {
$num = func_num_args();
echo("函数包含:" . $num . "个参数\n");
$sum = 0;
$arg_list = func_get_args();
for($i=0; $i<$num; $i++) {
$sum = $sum + $arg_list[$i];
}
return $sum;
}
echo("计算结果为:" . mysum (1, 2, 3, 4));
?>
运行结果如下:
函数包含:4个参数
计算结果为:10
可以在函数中返回多个值(即返回数组)。
【例6-16】 下面程序中的mysquare()函数返回参数列表中所有参数的平方值。
<?PHP
function mysquare() {
$num = func_num_args();
$sum = 0;
$arg_list = func_get_args();
for($i=0; $i<$num; $i++) {
$arg_list[$i] = $arg_list[$i] * $arg_list[$i];
}
return $arg_list;
}
print_r(mysquare(1, 2, 3, 4));
?>
程序将参数值计算平方值,保存在数组$arg_list中,然后将数组$arg_list作为函数的返回值。使用print_r()函数打开mysquare()函数的返回结果,内容如下:
Array ( [0] => 1 [1] => 4 [2] => 9 [3] => 16 )
共有条评论 网友评论