PHP函数参数
介绍
可以将PHP中的函数定义为接受参数形式的调用环境/脚本的输入。这些参数在函数名称前面的括号内以逗号分隔的列表形式给出。请注意,在调用函数时,必须将相同数量的参数传递给它。
PHP支持通过传递值,引用,具有默认值的参数以及传递可变数量的参数来调用函数。
带参数的功能
在下面的示例中,使用两个形式参数定义函数。通过传递参数值调用此函数时。函数的参数成为其局部变量。因此,函数内部参数值的任何变化都不会反映在函数外部。
此处,$x的值在函数内部已更改,但是如果我们在调用函数后检查其值,则它不会更改
示例
<?php function add($x, $y){ $x= $x+$y ; echo $x . "\n"; } $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\n"; } $x=5; $y=7; echo "before calling function x=$x y=$y\n"; swap($x, $y); echo "after calling function x=$x y=$y\n"; ?>
输出结果
这将产生以下结果。-
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)。但是,函数中参数的类型声明使解析器无法检测传递给函数的错误数据类型。
语法
//define a function with type hints 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\n"; echo "total=". add(1,2,3,4,5). "\n"; ?>
输出结果
这将产生以下结果。-
total= 45 total=15
也可以在 func_get_args()函数的帮助下获取传递给函数的参数列表。我们可以运行一个PHP循环来遍历传递的参数列表中的每个值。在这种情况下,函数定义没有形式参数。
示例
<?php function add (int $x, int $y){ $z=$x+$y; echo "addition=$z\n"; } add(10,20); add(5.55, 6.66); ?>
输出结果
这将产生以下结果。-
addition=30 addition=11
请注意,在第二次调用add()
函数时,浮点数作为参数给出,但仍不显示错误/警告。这是因为PHP在内部强制转换为整数以执行加法运算。为了防止这种自动类型转换,请使用带有strict_types=1的声明构造
示例
<?php declare(strict_types=1); function add (int $x, int $y){ $z=$x+$y; echo "addition=$z\n"; } 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