PHP 函数可以定义为接受一个或多个参数。函数参数是定义函数时函数名称前面括号内的逗号分隔表达式列表。参数可以是任何标量类型(数字、字符串或布尔值)、数组、对象,甚至是其他函数。
function foo($arg_1, $arg_2, $arg_n) {
statements;
return $retval;
}
参数充当要在函数体内处理的变量。因此,它们遵循与任何普通变量相同的命名约定,即它们应以 “$” 开头,并且可以包含字母、数字和下划线。
注意: 可以定义的参数数量没有限制。
当需要调用参数化函数时,您必须确保传递给它的值数量与函数定义中的参数数量相同。
foo(val1, val2, val_n);
使用参数定义的函数可以生成根据传递的值动态变化的结果。
例
以下代码包含带有两个参数的 addition() 函数的定义,并显示两个参数的加法。运行时输出取决于传递给函数的两个值。
<?php
function addition($first, $second) {
$result = $first+$second;
echo "First number: $first \n";
echo "Second number: $second \n";
echo "Addition: $result";
}
addition(10, 20);
$x=100;
$y=200;
addition($x, $y);
?>
它将产生以下输出 -
First number: 10
Second number: 20
Addition: 30
First number: 100
Second number: 200
Addition: 300
Second number: 20
Addition: 30
First number: 100
Second number: 200
Addition: 300
形式参数和实际参数
有时,术语 argument 用于参数。其实,这两个术语有一定的区别。
- 参数是指函数定义中使用的变量,而参数是指调用时传递给函数的值。
- 参数可以是文本、变量或表达式
- 函数定义中的参数通常也称为 形式参数,传递的内容称为 实际参数。
- 形式参数和实际参数的名称不必相同。实际参数的值按从左到右的顺序分配给相应的形式参数。
- 函数中定义的形式参数的数量和传递的实际参数的数量应该相同。
例
当实际参数的数量少于形式参数的数量时,PHP 会引发 ArgumentCountError。但是,如果其他实际参数大于正式参数,则忽略这些参数。
<?php
function addition($first, $second) {
$result = $first+$second;
echo "First number: $first \n";
echo "Second number: $second \n";
echo "Addition: $result \n";
}
# Actual arguments more than formal arguments
addition(10, 20, 30);
# Actual arguments fewer than formal arguments
$x=10;
$y=20;
addition($x);
?>
它将产生以下输出 -
First number: 10
Second number: 20
Addition: 30
PHP Fatal error: Uncaught ArgumentCountError: Too few arguments
to function addition(), 1 passed in /home/cg/root/20048/main.php
on line 16 and exactly 2 expected in /home/cg/root/20048/main.php:2
Second number: 20
Addition: 30
PHP Fatal error: Uncaught ArgumentCountError: Too few arguments
to function addition(), 1 passed in /home/cg/root/20048/main.php
on line 16 and exactly 2 expected in /home/cg/root/20048/main.php:2
参数类型不匹配
PHP 是一种动态类型的语言,因此在用形式参数复制实际参数的值时,它不会强制进行类型检查。但是,如果函数体中的任何语句试图执行特定于不支持它的特定数据类型的操作,PHP 会引发异常。
在上面的 addition() 函数中,假设传递了数字参数。如果传递了字符串参数,PHP 没有任何异议,但是执行加法的语句遇到异常,因为没有为字符串类型定义 “+” 操作。
例
请看下面的例子 -
<?php
function addition($first, $second) {
$result = $first+$second;
echo "First number: $first \n";
echo "Second number: $second \n";
echo "Addition: $result";
}
# Actual arguments are strings
$x="Hello";
$y="World";
addition($x, $y);
?>
它将产生以下输出 -
PHP Fatal error: Uncaught TypeError: Unsupported operand types: string + string in hello.php:5
但是,PHP 是一种弱类型语言。它尝试尽可能地将变量转换为兼容的类型。因此,如果传递的值之一是一个数字的字符串表示,而另一个是数字变量,那么 PHP 会将 字符串变量 转换为 数字变量 以执行加法运算。
例
请看下面的例子 -
<?php
function addition($first, $second) {
$result = $first+$second;
echo "First number: $first \n";
echo "Second number: $second \n";
echo "Addition: $result";
}
# 实际参数是字符串
$x="10";
$y=20;
addition($x, $y);
?>
它将产生以下输出 -
First number: 10
Second number: 20
Addition: 30
Second number: 20
Addition: 30