View Full Version : Bạn nào giúp mình cái này với. (chẳng biết đặt tên nó là gì nữa)
honnhienh
24-06-2010, 19:15
Mình đang học lập trình trên php. mình thắc mắc cái dấu & đứng trước các hàm các biến trong php có chức năng gì. Cái này mình còn lơ mơ quá lên mong các bạn giúp.
diepnghitinh
24-06-2010, 19:49
cái này là con trỏ bạn à
honnhienh
24-06-2010, 23:21
Thêm thông tin đuoc hog bạn
Cái đó gọi là toán tử tham chiếu. Trong PHP ko có cái gì gọi là con trỏ (pointer) như trong C. Cũng giống như toán tử \$ của Perl, toán tử & làm nhiệm vụ tạo ra một tham chiếu đến 1 nội dung cho trước: nội dung mảng, nội dung của đối tượng ... thay vì tạo ra một bản sao nôi dung mới.
http://www.php.net/manual/en/language.references.pass.php
thuyduongcd
25-06-2010, 09:36
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:
//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ị
diepnghitinh
26-06-2010, 20:19
bổ sung nhé ^^ :D
đây gọi là truyền tham trị
function add_1($a){
}
còn đây là truyền tham chiếu
function add_2(&$a){
}
honnhienh
26-06-2010, 20:50
thank các bác giúp đỡ
Dấu & ở trước là con trỏ để lấy địa chỉ các ô nhớ
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.