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

更新于:2020年9月18日

5K+ 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告