2010-05-23 33 views
5

bất cứ ai có ý tưởng nếu và làm thế nào là nó có thể phá hủy/thay đổi đối tượng php được tham chiếu ở nhiều nơi? unset rõ ràng phá hủy chỉ một tham chiếu và đôi khi truy tìm tất cả các tham chiếu theo cách thủ công không phải là một tùy chọn. Bất kỳ ý tưởng? Có lẽ có cái gì đó tôi đang thiếu trong Reflection?có cách nào để truy cập tất cả các tham chiếu đến đối tượng đã cho không?

Trả lời

3

Nice câu trả lời Mark, nhưng tôi không chắc chắn cách này sẽ làm việc:

Sơ đồ đầu tiên:

<?php 

$obj = "foo"; 
$a = $obj; 
$b = $obj; 
$c = $obj; 

$c = NULL; 
unset($c); 
var_dump($a, $b, $c); 

Kết quả:

string(3) "foo" 
string(3) "foo" 
NULL 

Second Diagram:

<?php 

$obj = "foo"; 
$wrapper =& $obj; 
$a = $wrapper; 
$b = $wrapper; 
$c = $wrapper; 

$c = NULL; 
unset($c); 
var_dump($a, $b, $c); 

Kết quả:

string(3) "foo" 
string(3) "foo" 
NULL 

Way đúng:

<?php 

$obj = "foo"; 
$a =& $obj; 
$b =& $obj; 
$c =& $obj; 

$c = NULL; 
var_dump($a, $b, $c); 

Kết quả:

NULL 
NULL 
NULL 

Giải thích:

Bạn cần phải tham khảo các biến của bạn $ a, $ b, $ c đến địa chỉ bộ nhớ của $ obj, đây khi bạn đặt $ c thành NULL, điều này sẽ đặt địa chỉ bộ nhớ thực tế thành NULL thay vì chỉ tham chiếu.

+0

mặc dù thực tế, khi đặt tham chiếu đến một đối tượng, không phải lúc nào cũng dễ dàng đặt nó bằng cách sử dụng tham chiếu. – andho

6

Không, nhưng thay vào đó, bạn có thể sử dụng thêm một mức không giới hạn. Hiện nay bạn có điều này:

a b  c   a b (unset) 
    \ | /   \ | 
    \ | / -->  \ | 
    object     object 

Thay vào đó bạn có thể làm điều này:

a b  c   a b  c 
    \ | /   \ | /
    \ | / -->  \ | /
    wrapper    (unset) 
     | 
     | 
    object 
+0

Câu trả lời hình ảnh đẹp mắt. – webbiedave

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