PHP - 默认参数



与大多数支持命令式编程的语言一样,PHP 中的函数可能具有一个或多个具有默认值的参数。因此,可以调用此类函数,而无需向其传递任何值。如果没有要传递的值,则函数将采用其默认值进行处理。如果函数调用确实提供了值,则默认值将被覆盖。


function fun($arg1 = val1, $arg2 = val2) {
   Statements;
}

这样的函数可以用不同的方式调用 -


fun();            # 函数将对这两个参数使用默认值
fun($x);        # 函数将$x传递给arg1,并对arg2使用默认值
fun($x, $y);    # 两个参数都使用传递的值

示例 1

在这里,我们定义了一个名为 greeting() 的函数,它有两个参数,两个参数都以 string 作为默认值。我们通过传递一个字符串、两个字符串并且不带任何参数来调用它。


<?php  
   function  greeting($arg1="Hello", $arg2="world") {
      echo $arg1 . " ". $arg2 . PHP_EOL;
   }

   greeting();
   greeting("Thank you");
   greeting("Welcome", "back");
   greeting("PHP");
?>

它将产生以下输出 -

Hello world
Thank you world
Welcome back
PHP world

示例 2

您可以定义一个函数,其中仅包含一些具有默认值的参数,而其他参数必须将值传递到该参数。


<?php  
   function  greeting($arg1, $arg2="World") {
      echo $arg1 . " ". $arg2 . PHP_EOL;
   }

   # greeting(); ## 这将引发 ArgumentCountError
   greeting("Thank you");
   greeting("Welcome", "back");
?>

它将产生以下输出 -

Thank you World
Welcome back

第一次调用(不带参数)会引发 ArgumentCountError,因为您必须为第一个参数传递值。如果只传递了一个值,则列表中的第一个参数将使用该值。

但是,如果在没有 defaults 的参数之前声明带有 default 的参数,则只有在传递了两者的值时才能调用此类函数。你不能出现第一个参数使用 default,而第二个参数使用传递的值的情况。

greeting() 函数现在有 $arg 1 和 default$arg 2 没有任何默认值。


function  greeting($arg1="Hello", $arg2) {
   echo $arg1 . " ". $arg2 . PHP_EOL;
}

如果您传递字符串 “PHP” -


 greeting("PHP");

如果打算将结果打印为 “Hello PHP”,则会显示以下错误消息。

PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function 
greeting(), 1 passed in hello.php on line 10 and exactly 2 expected

示例 3

让我们定义一个函数 percent() 来计算三个科目的分数百分比。

假设每个主题中的分数满分 100,则函数定义中的 $total 参数的默认值为 300。


<?php
   function  percent($p, $c, $m, $ttl=300) {
      $per = ($p+$c+$m)*100/$ttl;
      echo "Marks obtained: \n";
      echo "Physics = $p Chemistry = $c Maths = $m \n";
      echo "Percentage = $per \n";
   }
   percent(50, 60, 70);
?>

它将产生以下输出 -

Marks obtained: 
Physics = 50 Chemistry = 60 Maths = 70 
Percentage = 60

但是,如果每个科目的最大分数为 50,则必须将第四个值传递给函数,否则百分比将从 300 而不是 150 中计算出来。


<?php
   function  percent($p, $c, $m, $ttl=300) {
      $per = ($p+$c+$m)*100/$ttl;
      echo "Marks obtained: \n";
      echo "Physics = $p Chemistry = $c Maths = $m \n";
      echo "Percentage = $per \n";
   }
   percent(30, 35, 40, 150);
?>

它将产生以下输出 -

Marks obtained: 
Physics = 30 Chemistry = 35 Maths = 40 
Percentage = 70