2012-01-27 28 views
11

Tôi có mã bên dưới. Tôi muốn thay đổi $ b để sử dụng lại nó với các giá trị. Nếu tôi làm như vậy nó cũng thay đổi $ a. Làm cách nào tôi có thể gán lại giá trị cho $ b sau khi đã gán giá trị đó làm tham chiếu đến $ a?PHP xóa "tham chiếu" khỏi một biến.

$a = 1; 
$b = &$a; 

// later 
$b = null; 

Trả lời

12

Xem giải thích inline

$a = 1;
$b = &$a; Bây giờ $ b và $ a trở thành biến tương tự chỉ với 2 tên khác nhau
unset($b); $ b tên đã biến mất, biến mất khỏi ngữ cảnh Nhưng $ a vẫn có sẵn
$b = 2; Hiện tại $ b giống như một biến mới có giá trị mới. Bắt đầu cuộc sống mới.

7
$a = 1; 
$b = &$a; 

unset($b); 
// later 
$b = null; 
3

Trước hết: Tạo một tài liệu tham khảo $a-$b tạo ra một kết nối (đối với việc thiếu một từ tốt hơn) giữa hai biến, vì vậy $a thay đổi khi $b thay đổi này là chính xác cách thức mà nó là có nghĩa là để làm việc.

Vì vậy, giả sử bạn muốn phá vỡ các tài liệu tham khảo, cách dễ nhất ist

unset($b); 
$b="new value"; 
5

Câu trả lời bởi @xdazz là đúng, nhưng chỉ để thêm các ví dụ tuyệt vời sau đây từ PHP Manual mà đưa ra một cái nhìn sâu sắc vào những gì PHP đang làm dưới mui xe.

Trong ví dụ này, bạn có thể thấy rằng $bar trong hàm foo() là tham chiếu tĩnh tới biến phạm vi chức năng.

unset $bar loại bỏ các tài liệu tham khảo nhưng không deallocate bộ nhớ:

<?php 
function foo() 
{ 
    static $bar; 
    $bar++; 
    echo "Before unset: $bar, "; 
    unset($bar); 
    $bar = 23; 
    echo "after unset: $bar\n"; 
} 

foo(); 
foo(); 
foo(); 
?> 

Ví dụ trên sẽ ra:

Before unset: 1, after unset: 23 
Before unset: 2, after unset: 23 
Before unset: 3, after unset: 23 
+0

Ví dụ điển hình về mức độ phức tạp của việc này. – dmikam

Các vấn đề liên quan