2010-05-23 14 views

cevap

3

Güzel cevap Mark, ama bu nasıl olacağı emin değilim:

İlk Şeması:

<?php 

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

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

Sonuçlar:

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

İkinci Şeması:

<?php 

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

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

Sonuçlar:

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

Doğru Yol:

<?php 

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

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

Sonuçlar:

NULL 
NULL 
NULL 

Açıklama: Sen $ a $, b $ nesne bellek adresine $ c, bu değişkenleri başvurmak gerekir

NULL için $ c ayarladığınızda, bu yalnızca referans yerine gerçek bellek adresini NULL olarak ayarlar.

+0

pragmatik olarak, bir nesneye bir referans belirlerken, bir referans kullanarak ayarlamak her zaman daha kolay değildir. – andho

6

Hayır ancak bunun yerine fazladan bir seviyede kullanabilirsiniz. Şu anda bu var:

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

yerine bunu yapabilirsiniz:

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

Güzel görsel cevap. – webbiedave

İlgili konular