PDA

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

pcdinh
24-06-2010, 23:34
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 đỡ

vvthong
28-06-2010, 10:37
Dấu & ở trước là con trỏ để lấy địa chỉ các ô nhớ