PHP - 預設引數



像大多數支援指令式程式設計的語言一樣,PHP 中的函式可以擁有一個或多個具有預設值的引數。因此,這樣的函式可以在不向其傳遞任何值的情況下被呼叫。如果不需要傳遞值,函式將採用其預設值進行處理。如果函式呼叫提供了值,則預設值將被覆蓋。

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

這樣的函式可以以不同的方式呼叫:

fun();			# Function will use defaults for both arguments
fun($x);		# Function passes $x to arg1 and uses default for arg2
fun($x, $y);	# Both arguments use the values passed

示例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(); ## This will raise ArgumentCountError
   greeting("Thank you");
   greeting("Welcome", "back");
?>

它將產生以下輸出

Thank you World
Welcome back

第一次呼叫(無引數)會引發ArgumentCountError,因為您必須為第一個引數傳遞值。如果只傳遞一個值,它將被列表中的第一個引數使用。

但是,如果您在沒有預設值的引數之前宣告具有預設值的引數,則只有在為兩者都傳遞值時才能呼叫此函式。您不能出現第一個引數使用預設值,而第二個引數使用傳遞的值的情況。

greeting() 函式現在具有帶有預設值的 $arg1 和沒有任何預設值的 $arg2

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
廣告