PHP - Default Arguments

Giống như hầu hết các ngôn ngữ hỗ trợ lập trình mệnh lệnh, một hàm trong PHP có thể có một hoặc nhiều tham số có giá trị mặc định. Do đó, hàm như vậy có thể được gọi mà không cần truyền bất kỳ giá trị nào cho nó. Nếu không có giá trị nào được truyền, hàm sẽ lấy giá trị mặc định của nó để xử lý. Nếu cuộc gọi hàm cung cấp một giá trị, giá trị mặc định sẽ bị ghi đè.

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

Chức năng như vậy có thể được gọi theo nhiều cách khác nhau −

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

Example 1

Ở đây, chúng ta định nghĩa một hàm có tên là greeting() với hai tham số, cả hai đều có giá trị mặc định là string . Chúng ta gọi hàm này bằng cách truyền vào một chuỗi, hai chuỗi và không truyền tham số nào.

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

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

Nó sẽ tạo ra output

Hello world
Thank you world
Welcome back
PHP world

Example 2

Bạn có thể định nghĩa một hàm với chỉ một số đối số có giá trị mặc định, và các đối số khác mà giá trị phải được truyền vào.

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

   # greeting(); ## This will raise ArgumentCountError
   greeting("Thank you");
   greeting("Welcome", "back");
?>

Nó sẽ tạo ra output

Thank you World
Welcome back

Cuộc gọi đầu tiên (không có tham số) sẽ gây ra ArgumentCountError vì bạn phải truyền giá trị cho tham số đầu tiên. Nếu chỉ có một giá trị được truyền, nó sẽ được sử dụng cho tham số đầu tiên trong danh sách.

Tuy nhiên, nếu bạn khai báo các tham số với default trước các tham số không có giá trị mặc định, thì hàm đó chỉ có thể được gọi nếu cả hai giá trị đều được truyền vào. Bạn không thể có tình huống mà tham số đầu tiên sử dụng giá trị mặc định, và tham số thứ hai sử dụng giá trị đã được truyền vào.

Hàm greeting() hiện có $arg1 với giá trị mặc định và $arg2 không có giá trị mặc định nào.

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

Nếu bạn truyền một chuỗi "PHP" −

greeting("PHP");

Với ý định in kết quả là "Hello PHP", thông báo lỗi sau sẽ được hiển thị.

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

Example 3

Hãy định nghĩa một hàm percent() tính toán tỷ lệ phần trăm điểm số trong ba môn học.

Giả sử rằng điểm trong mỗi môn học là 100, tham số $total trong định nghĩa hàm được gán giá trị mặc định là 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);
?>

Nó sẽ tạo ra output

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

Tuy nhiên, nếu điểm tối đa trong mỗi môn là 50, thì bạn phải truyền giá trị thứ tư cho hàm, nếu không, tỷ lệ phần trăm sẽ được tính trên tổng 300 thay vì 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);
?>

Nó sẽ tạo ra output

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