Php 简明教程

PHP - Function Parameters

PHP 中的某个函数可能会被定义为接受一个或多个参数。在定义函数时,函数参数是函数名称前面圆括号内的表达式的逗号分隔列表。参数可以是任何标量类型(数字、字符串或布尔值)、数组、对象,甚至可以是另一个函数。

function foo($arg_1, $arg_2, $arg_n) {
   statements;
   return $retval;
}

在函数体中,参数作为要处理的变量。因此,它们遵循与任何普通变量相同的命名约定,即它们应以 “$” 开头,可以包含字母、数字和下划线。

Note −定义的参数数量没有限制。

当需要调用参数化的函数时,你必须确保传递给它的值与函数定义中的参数数量相同。

foo(val1, val2, val_n);

使用参数定义的函数可以产生根据传递的值动态改变的结果。

Example

以下代码包含一个带有两个参数的 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);
?>

它将生成以下 output

First number: 10
Second number: 20
Addition: 30
First number: 100
Second number: 200
Addition: 300

Formal and Actual Arguments

有时, argument 一词被用来表示 parameter 。实际上,这两个术语之间存在一定的差异。

  1. 参数是指函数定义中使用的变量,而实参是指在调用时传递给函数的值。

  2. 实参可以是字面量、变量或表达式。

  3. 函数定义中的参数通常也称为 formal arguments ,而传递的内容称为 actual arguments

  4. 形式实参和实际实参的名称不必相同。实际实参的值会从左到右的顺序分配给相应的形式实参。

  5. 函数中定义的形式实参数量和传递的实际实参数量应相同。

Example

当实际实参数量少于形式实参数量时,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);
?>

它将生成以下 output

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

Arguments Type Mismatch

PHP 是一种动态类型语言,因此它在使用实际实参的值复制形式实参时不强制进行类型检查。然而,如果函数体内的任何语句尝试对不支持特定数据类型执行特定操作,PHP 会引发异常。

在上面的 addition() 函数中,假定传递的是数值实参。如果传递字符串实参,PHP 不会有任何反对意见,但执行加法的语句会遇到异常,因为字符串类型未定义“+”运算。

Example

请看以下示例:

<?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);
?>

它将生成以下 output

PHP Fatal error:  Uncaught TypeError: Unsupported operand types: string + string in hello.php:5

但是,PHP 是一种弱类型语言。它会尝试尽可能将变量强制转换为兼容类型。因此,如果传递的值之一是数字的字符串表示,而第二个是数值变量,则 PHP 会将字符串变量强制转换为数值类型来执行加法运算。

Example

请看以下示例:

<?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="10";
   $y=20;
   addition($x, $y);
?>

它将生成以下 output

First number: 10
Second number: 20
Addition: 30