Giả sử bạn có 1 hàm nhận vào 1 tham số. Nếu không dùng & thì tham số này chỉ được sử dụng giá trị của nó (sau khi ra khỏi hàm thì giá trị biến truyền vào không thay đổi), còn nếu dùng & phía trước thì biến truyền vào là một tham biến thực sự (giá trị biến sẽ thay đổi sau khi ra khỏi hàm (nếu có)).
Lấy ví dụ bạn có 2 hàm:
Code:
//add_1 không có &
function add_1($a){
$a++;
}
// add_2 có &
function add_2(&$a){
$a++;
}
$b=4;
add_1($b);
echo $b; //kết quả =4
//bạn thấy sau khi gọi hàm add_1, biến b vẫn không thay đổi vì hàm add_1 chỉ lấy giá trị của b mà dùng thôi
add_2($b);
echo $b; //kết quả =5
//sau khi gọi add_2, giá trị của b thay đổi (do trong hàm thay đổi, thực chất là thay đổi $a). Như vậy, khi dùng &, hàm sẽ tạo 1 bản sao của biến truyền vào và mọi thao tác liên quan đến tham biến này cũng sẽ ảnh hưởng đến biến truyền vào (nói đơn giản, $a là đại diện cho $b)
Nó cũng tương tự như từ khóa byval trong VB.NET, nhưng ngược lại:
VB.NET: có byval => dùng giá trị (tham trị); không byval => dùng biến (tham biến)
PHP: có & => dùng tham biến; không & => tham trị
Bookmarks