PHP 函数参数
简介
PHP 中的函数可以定义为以参数的形式接受来自调用环境/脚本的输入。这些参数以逗号分隔的列表形式放在函数名称前的括号内。请注意,调用函数时,必须传递相同数量的参数。
PHP 支持通过传递值、引用、具有默认值的参数以及传递可变数量的参数来调用函数。
带参数的函数
在以下示例中,一个函数被定义为具有两个正式参数。当通过传递值来调用此函数时,函数的参数将成为其局部变量。因此,函数内部参数值的任何变化都不会反映在函数外部。
此处,$x 的值在函数内部发生了变化,但如果我们在函数调用后检查其值,则它并没有改变。
示例
<?php
function add($x, $y){
$x= $x+$y ;
echo $x . "
";
}
$x=10;
$y=20;
add($x,$y);
//函数外部 $x 保留先前的值。
echo $x;
?>
输出
这将产生以下结果。−
30 10
将数组传递给函数
在以下示例中,add() 函数被定义为接收数组作为参数。在函数内部,使用 foreach 循环遍历数组元素
示例
<?php
function add($arr){
$sum=0;
foreach ($arr as $i){
$sum+=$i;
}
echo "sum = " .$sum;
}
add(array(1,2,3));
?>
输出
这将产生以下结果。−
sum = 6
通过引用传递参数
值是通过值传递给函数的参数的。因此,函数内部对参数值的更改不会反映在函数外部。当通过引用传递参数时,更改会传递到函数外部的参数值。
为了通过引用接收值,参数名称必须以 $ 符号为前缀
示例
<?php
function swap(&$x, &$y){
$t=$x;
$x=$y;
$y=$t;
echo "inside function x=$x y=$y
";
}
$x=5;
$y=7;
echo "before calling function x=$x y=$y
";
swap($x, $y);
echo "after calling function x=$x y=$y
";
?>
输出
这将产生以下结果。−
before calling function x=5 y=7 inside function x=7 y=5 after calling function x=7 y=5
变量 $x 和 $y 的值在 swap() 函数中互换。由于变量是通过引用传递的,因此变量在函数外部也会显示修改后的值。
类型提示(类型声明)
PHP 实际上是一门动态类型语言。因此,无需像 C/C++ 或 Java 那样声明变量的类型。但是,函数中参数的类型声明允许解析器检测传递给函数的错误数据类型。
语法
//定义一个带有类型提示的函数
function myfunction(type $arg1, type $arg2){
..
..
}
所有标准 PHP 数据类型,包括标量类型、数组、类/接口、可迭代对象和对象,都是在函数声明中提供类型提示的有效类型
示例
<?php
function add(...$numbers){
$ttl=0;
foreach ($numbers as $num){
$ttl=$ttl+$num;
}
return $ttl;
}
$total=add(10,15,20);
echo "total= $total
";
echo "total=". add(1,2,3,4,5). "
";
?>
输出
将产生以下结果。−
total= 45 total=15
也可以借助 func_get_args() 函数获取传递给函数的参数列表。我们可以运行 PHP 循环来遍历传递的参数列表中的每个值。在这种情况下,函数定义没有正式的参数。
示例
<?php
function add (int $x, int $y){
$z=$x+$y;
echo "addition=$z
";
}
add(10,20);
add(5.55, 6.66);
?>
输出
这将产生以下结果。−
addition=30 addition=11
请注意,在第二次调用 add() 函数时,虽然传入了浮点数作为参数,但仍然没有显示任何错误/警告。这是因为 PHP 在执行加法运算时,内部会将浮点数强制转换为整数。为了避免这种自动类型转换,请使用 declareconstruct 并设置 strict_types=1
示例
<?php
declare(strict_types=1);
function add (int $x, int $y){
$z=$x+$y;
echo "addition=$z
";
}
add(10,20);
add(5.55, 6.66);
?>
第二次调用 add() 函数现在将抛出异常 −
输出
addition=30 PHP Fatal error: Uncaught TypeError: Argument 1 passed to add() must be of the type integer, float given

