2012-01-27 18 views
11

Aşağıdaki kodum var. Değerlerle tekrar kullanmak için $ b'yi değiştirmek istiyorum. Bunu yaparsam, $ a da değişir. Daha önce $ a'ya referans olarak atadıktan sonra tekrar $ b'ye bir değer atayabilir miyim? Her şeydenPHP "referansı" bir değişkenden kaldırın.

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

// later 
$b = null; 

cevap

12

bakınız açıklama satır içi

$a = 1;
$b = &$a; Şimdi $ b ve $ a sadece 2 farklı isimle aynı değişken olur
unset($b); $ b adı kayboldu, bağlamdan kayboldu Ama $ a hala kullanılabilir
$b = 2; Şimdi $ b yeni bir değere sahip yeni bir değişken gibi. Yeni hayata başlamak.

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

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

İlk: $b değişiklikler yapmadan olduğu yolu olduğunda $b için $a gelen bir başvuru oluşturma değişen iki değişken arasındaki (daha iyi bir kelime eksikliği için) bir bağlantı, yani $a yaratır çalışmak anlamına geliyordu.

Yani, başvuru, ist kolay yolu kırmak istiyorum varsayarak

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

@xdazz tarafından yanıt doğru, ama sadece içine bir fikir verir PHP Manual aşağıdaki büyük bir örnek eklemek ne PHP başlık altında yapıyor.

Bu örnekte foo() işlevindeki $bar öğesinin, işlev kapsamı değişkenine statik bir başvuru olduğunu görebilirsiniz.

Tanımsız $bar referansını kaldırır ama bellek ayırması değildir:

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

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

yukarıdaki örneği çıktısı:

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

Bunun ne kadar zor olabileceğine dair iyi bir örnek. – dmikam