Computer >> Máy Tính >  >> Lập trình >> PHP

Các đối số của hàm PHP

Giới thiệu

Một hàm trong PHP có thể được định nghĩa để chấp nhận đầu vào từ việc gọi môi trường / tập lệnh dưới dạng đối số. Các đối số này được đưa ra dưới dạng danh sách được phân tách bằng dấu phẩy bên trong dấu ngoặc đơn phía trước tên của hàm. Lưu ý rằng trong khi gọi một hàm, phải chuyển cùng một số đối số cho nó.

PHP hỗ trợ gọi một hàm bằng cách truyền giá trị, tham chiếu, đối số với giá trị mặc định và bằng cách truyền số lượng đối số biến.

Hàm

có đối số

Trong ví dụ sau, một hàm được định nghĩa với hai đối số chính thức. Khi hàm này được gọi bằng cách truyền các đối số theo giá trị. Các đối số của hàm trở thành biến cục bộ của nó. Do đó, bất kỳ thay đổi nào về giá trị của đối số bên trong một hàm đều không phản ánh bên ngoài nó.

Ở đây, giá trị của $ x được thay đổi bên trong hàm, nhưng nếu chúng ta kiểm tra giá trị của nó sau khi gọi hàm thì nó không thay đổi

Ví dụ

<?php
function add($x, $y){
   $x= $x+$y ;
   echo $x . "\n";
}
$x=10;
$y=20;
add($x,$y);
//outside function $x has previous value.
echo $x;
?>

Đầu ra

Điều này sẽ tạo ra kết quả sau. -

30
10

Truyền mảng cho hàm

Trong ví dụ sau, hàm add () được định nghĩa để nhận mảng làm đối số. Bên trong hàm, các phần tử mảng được duyệt qua bằng vòng lặp foreach

Ví dụ

<?php
function add($arr){
   $sum=0;
   foreach ($arr as $i){
      $sum+=$i;
   }
   echo "sum = " .$sum;
}
add(array(1,2,3));
?>

Đầu ra

Điều này sẽ tạo ra kết quả sau. -

sum = 6

Truyền đối số bằng tham chiếu

Giá trị được truyền cho các đối số của hàm theo giá trị. Do đó, các thay đổi đối với giá trị của đối số bên trong hàm không được phản ánh bên ngoài nó. Khi các đối số được truyền bằng tham chiếu, các thay đổi sẽ được chuyển sang giá trị của đối số bên ngoài nó.

Để nhận giá trị bằng tham chiếu, tên của đối số phải được bắt đầu bằng ký hiệu $

Ví dụ

<?php
function swap(&$x, &$y){
   $t=$x;
   $x=$y;
   $y=$t;
   echo "inside function x=$x y=$y\n";
}
$x=5;
$y=7;
echo "before calling function x=$x y=$y\n";
swap($x, $y);
echo "after calling function x=$x y=$y\n";
?>

Đầu ra

Điều này sẽ tạo ra kết quả sau. -

before calling function x=5 y=7
inside function x=7 y=5
after calling function x=7 y=5

Giá trị của các biến $ x và $ y được hoán đổi cho nhau trong hàm swap (). Vì các biến được truyền bằng tham chiếu, các biến cũng hiển thị các giá trị đã sửa đổi bên ngoài hàm

Gợi ý kiểu (Khai báo kiểu)

PHP trên thực tế là một ngôn ngữ được định kiểu động. Do đó, không cần thiết phải khai báo một biến với kiểu của nó (như trong C / C ++ hoặc Java). Tuy nhiên, khai báo kiểu của các đối số trong một hàm sẽ giúp trình phân tích cú pháp phát hiện các kiểu dữ liệu không chính xác được truyền cho hàm.

Cú pháp

//define a function with type hints
function myfunction(type $arg1, type $arg2){
   ..
   ..
}

Tất cả các kiểu dữ liệu PHP chuẩn bao gồm kiểu vô hướng, mảng, lớp / giao diện, có thể lặp lại và đối tượng là các kiểu hợp lệ để cung cấp gợi ý kiểu trong khai báo hàm

Ví dụ

<?php
function add(...$numbers){
   $ttl=0;
   foreach ($numbers as $num){
      $ttl=$ttl+$num;
   }
   return $ttl;
}
$total=add(10,15,20);
echo "total= $total\n";
echo "total=". add(1,2,3,4,5). "\n";
?>

Đầu ra

Điều này sẽ tạo ra kết quả sau. -

total= 45
total=15

Cũng có thể lấy danh sách các đối số được truyền cho một hàm với sự trợ giúp của func_get_args () hàm số. Chúng ta có thể chạy một vòng lặp PHP để duyệt qua từng giá trị trong danh sách các đối số được truyền vào. Trong trường hợp đó, định nghĩa hàm không có đối số chính thức.

Ví dụ

<?php
function add (int $x, int $y){
   $z=$x+$y;
   echo "addition=$z\n";
}
add(10,20);
add(5.55, 6.66);
?>

Đầu ra

Điều này sẽ tạo ra kết quả sau. -

addition=30
addition=11

Lưu ý rằng trong lần gọi hàm add () thứ hai, các float được đưa ra dưới dạng các đối số, nhưng vẫn không có lỗi / cảnh báo nào được hiển thị. Điều này là do nội bộ PHP ép buộc float thành số nguyên để thực hiện phép cộng. Để ngăn việc chuyển đổi kiểu tự động như vậy, hãy sử dụng khai báo cấu trúc với precision_types =1

Ví dụ

<?php
declare(strict_types=1);
function add (int $x, int $y){
   $z=$x+$y;
   echo "addition=$z\n";
}
add(10,20);
add(5.55, 6.66);
?>

Lệnh gọi thứ hai đến hàm add () bây giờ sẽ ném ra ngoại lệ -

Đầu ra

addition=30
PHP Fatal error: Uncaught TypeError: Argument 1 passed to add() must be of the type integer, float given