2012-01-07 39 views

Trả lời

8

Điều này có nghĩa là nó được truyền bằng tham chiếu thay vì giá trị ... IE bất kỳ thao tác nào của biến sẽ ảnh hưởng đến bản gốc. Điều này khác với giá trị mà bất kỳ sửa đổi nào không ảnh hưởng đến đối tượng gốc.

Điều này được hỏi nhiều lần trên lưu lượng truy cập stackoverflow.

+1

Để thêm, "Bằng cách tham khảo" có nghĩa là nó đề cập đến khối bộ nhớ được phân bổ tương tự cho các biến được gọi – Prof83

+1

như trái ngược với "theo giá trị", có nghĩa là một bản sao của biến được tạo bởi PHP trong một khối bộ nhớ mới. – Kaii

+0

Có hai cách để tham chiếu được chuyển vào mã ví dụ câu hỏi, [Tôi đã nêu cả hai] (http://stackoverflow.com/a/8769347/367456). – hakre

4

Nó được sử dụng để áp dụng thay đổi trong trường hợp duy nhất của mảng vào mảng chính ..

Như:

// Bây giờ những thay đổi sẽ không ảnh hưởng đến mảng $ wishesarray

foreach ($wishesarray as $id => $categoriy) { 
     $categoriy++; 
} 
print_r($wishesarray); //It'll same as before.. 

Nhưng Bây giờ thay đổi sẽ phản ánh trong mảng $ wishesarray cũng

foreach ($wishesarray as $id => &$categoriy) { 
     $categoriy++; 
} 
print_r($wishesarray); //It'll have values all increased by one.. 
36

Ví dụ này sẽ cho bạn thấy sự khác biệt

$array = array(1, 2); 
foreach ($array as $value) { 
    $value++; 
} 
print_r($array); // 1, 2 because we iterated over copy of value 

foreach ($array as &$value) { 
    $value++; 
} 
print_r($array); // 2, 3 because we iterated over references to actual values of array 

Kiểm tra các tài liệu PHP cho điều này ở đây: http://pl.php.net/manual/en/control-structures.foreach.php

+0

Cú pháp _by reference_ thường gây ra các lỗi như: "Không thể tạo tham chiếu đến/từ bù số chuỗi"? –

1

Đối với các mã trong câu hỏi của bạn, không thể có câu trả lời cụ thể cho vì vòng lặp foreach bên trong là trống rỗng.

Điều tôi thấy với mã của bạn là, bên trong foreach lặp qua tham chiếu thay vì cách thông thường.

Tôi đề nghị bạn hãy đọc của foreach PHP Manual page, nó bao gồm tất cả bốn trường hợp:

foreach($standard as $each); 

foreach($standard as &$each); # this is used in your question 

$reference = &$standard; 
foreach($reference as $each); 

$reference = &$standard; 
foreach($reference as &$each); # this is used in your question 
Các vấn đề liên quan