Làm sao để truyền tham số bằng cách truyền theo reference?
Mặc định, biến trong PHP khi được truyền vào như tham số của hàm thì sẽ được truyền theo giá trị (pass by value). Khi mà biến được truyền vào như vậy, tham số sẽ chỉ có hiệu lực ở trong hàm đó, mọi thay đổi tham số đó trong hàm không hề ảnh hưởng đến giá trị của biến gốc (biến ta dùng để truyền vào).
Ví dụ:
<?php
// Hàm dưới dùng để thay đổi giá
// trị của biến $string và in nó ra
function print_string($string)
{
$string = "Bien cuc bo"."\n";
// In biến $string ra
print($string);
}
// Mã điều khiển
$string = "Bien toan cuc"."\n";
print_string($string);
print($string);
?>
Code language: HTML, XML (xml)
Output:
Bien cuc bo
Bien toan cuc
Pass by reference (truyền địa chỉ): Khi biến được truyền bằng cách này, ta sẽ cần dùng thêm dấu & trước tên biến, ví dụ: function(&$x). Và khi dùng cách này, bản chất ta chỉ báo cho chương trình rằng đây là địa chỉ của biến ta truyền vào. Khi ta thay đổi giá trị biến ở trong hàm thì thực ra ta đang thay đổi giá trị của biến ta truyền vào. Điều này cũng có thể thực hiện theo hướng ngược lại: thay đổi giá trị của biến truyền vào thì biến trong hàm cũng sẽ được thay đổi.
Ví dụ:
<?php
// Hàm dưới dùng để thay đổi giá
// trị của biến $string và in nó ra
function print_string(&$string)
{
$string = "Bien cuc bo (chu y no nhe) \n";
// In biến $string ra
print($string);
}
// Mã điều khiển
$string = "Bien toan cuc \n";
print_string($string);
print($string);
?>
Code language: PHP (php)
Output:
Bien cuc bo (chu y no nhe)
Bien cuc bo (chu y no nhe)
Như thấy ở ví dụ trên, biến $string bị thay đổi trong hàm cũng làm thay đổi luôn biến $string ta truyền vào.
Tham khảo thêm:
Leave a Reply