Theo mặc định, PHP sử dụng cơ chế "gọi theo giá trị" để truyền tham số vào một hàm. Khi một hàm được gọi, các giá trị của tham số thực tế được sao chép vào các tham số chính thức trong định nghĩa của hàm.
Trong quá trình thực thi thân hàm, nếu có bất kỳ thay đổi nào trong giá trị của formal arguments , nó sẽ không được phản ánh trong actual arguments .
Actual Arguments − Các đối số được truyền vào trong một lời gọi hàm.
Formal Arguments − Các tham số được khai báo trong định nghĩa hàm.
Hãy xem xét hàm được sử dụng trong đoạn mã dưới đây −
<?php function change_name($nm) { echo "Initially the name is $nm \n"; $nm = $nm."_new"; echo "This function changes the name to $nm \n"; } $name = "John"; echo "My name is $name \n"; change_name($name); echo "My name is still $name"; ?>
Nó sẽ tạo ra output −
My name is John Initially the name is John This function changes the name to John_new My name is still John
Trong ví dụ này, hàm change_name() thêm _new vào đối số chuỗi được truyền cho nó. Tuy nhiên, giá trị của biến được truyền cho nó vẫn không thay đổi sau khi hàm thực thi.
Các tham số chính thức, thực tế, hoạt động như các biến cục bộ cho hàm. Một biến như vậy chỉ có thể truy cập bên trong phạm vi mà nó được khởi tạo. Đối với một hàm, phần thân của nó được đánh dấu bằng dấu ngoặc nhọn "{ }" là phạm vi của nó. Bất kỳ biến nào bên trong phạm vi này sẽ không có sẵn cho mã bên ngoài nó. Do đó, việc thao tác với bất kỳ biến cục bộ nào sẽ không ảnh hưởng đến thế giới bên ngoài.
Phương pháp "gọi theo giá trị" phù hợp cho một hàm sử dụng các giá trị được truyền vào. Nó thực hiện một số phép toán nhất định và trả về kết quả mà không cần phải thay đổi giá trị của các tham số được truyền vào.
Note − Bất kỳ hàm nào thực hiện tính toán theo dạng công thức đều là ví dụ của truyền tham trị.
Hãy xem xét ví dụ sau −
<?php function addFunction($num1, $num2) { $sum = $num1 + $num2; return $sum; } $x = 10; $y = 20; $num = addFunction($x, $y); echo "Sum of the two numbers is : $num"; ?>
Nó sẽ tạo ra output −
Sum of the two numbers is : 30
Dưới đây là một ví dụ khác về việc gọi một hàm bằng cách truyền tham số theo giá trị. Hàm này tăng số đã nhận lên 1, nhưng điều đó không ảnh hưởng đến biến đã được truyền cho nó.
<?php function increment($num) { echo "The initial value: $num \n"; $num++; echo "This function increments the number by 1 to $num \n"; } $x = 10; increment($x); echo "Number has not changed: $x"; ?>
Nó sẽ tạo ra output −
The initial value: 10 This function increments the number by 1 to 11 Number has not changed: 10
PHP cũng hỗ trợ việc truyền tham chiếu của các biến vào hàm khi gọi. Chúng ta sẽ thảo luận về điều này trong chương tiếp theo.