PHP 函数参数
介绍
PHP 函数可以定义为接受来自调用环境/脚本的输入,这些输入以参数的形式给出。这些参数以逗号分隔的列表形式出现在函数名称前面的括号内。请注意,在调用函数时,必须传递相同数量的参数。
PHP 支持按值传递、按引用传递、传递具有默认值的参数以及传递可变数量的参数来调用函数。
带参数的函数
在下面的示例中,定义了一个带有两个形式参数的函数。当通过按值传递参数调用此函数时,函数的参数成为其局部变量。因此,在函数内部对参数值进行的任何更改都不会反映在其外部。
在这里,$x 的值在函数内部发生了更改,但是如果我们在调用函数后检查其值,它并没有改变。
示例
<?php function add($x, $y){ $x= $x+$y ; echo $x . "
"; } $x=10; $y=20; add($x,$y); //outside function $x has previous value. 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 中)。但是,函数中参数的类型声明允许解析器检测传递给函数的错误数据类型。
语法
//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
"; 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 在内部将浮点数强制转换为整数以执行加法。为了防止这种自动类型转换,请使用 **declare** 结构和 **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