2010-08-21 7 views

cevap

13

Operatör = &, referanslarla değil, değerlerle çalışır. $var2=$var1 ve $var2=&$var1 arasındaki fark bu durumda görülebilir: Eğer = kullandığınızda

$var1 = 1; 
$var2 = $var1; 
$var1 = 2; 
echo $var1 . " " . $var2; // Prints '2 1' 

$var1 = 1; 
$var2 =& $var1; 
$var1 = 2; 
echo $var1 . " " . $var2; // Prints '2 2' 

& operatörü $ var2 için söylemiyorum "yerine şöyle bir cümle "Şimdi $ var1 değerini almak" Değeriniz, $ var1 değerinin tam olarak aynı yerde depolanacaktır ". Yani, var1 veya $ var2'nin içeriğini değiştirdiğinizde, iki değişkendeki değişikliği göreceksiniz. Daha detaylı bilgi için

PHP.net

DÜZENLEME bakmak: Küresel bölümü için , sen $GLOBALS["a"] =& $local; Cf kullanmanız gerekir dokümantasyon.

+0

Örneğimi kontrol edin, thx. – lovespring

+0

"Bir işlev içinde genel olarak bildirilen bir değişkene bir başvuru atarsanız, başvuru yalnızca işlevin içinde görünür olacaktır. Bunu, $ GLOBALS dizisini kullanarak önleyebilirsiniz." Sana verdiğim bağlantıyı kontrol et, globals hakkında bir bölüm var. –

5

$var2 = $var1'u yaptığınızda, PHP, $var1'un bir kopyasını oluşturur ve $var2 içine yerleştirir. Ancak, $var2 = &$var1 yaparsanız, hiçbir kopya yapılmaz. Bunun yerine, $var1 adresindeki $var2 noktasını döndürür - bunun anlamı, tam aynı şeyi işaret eden iki değişkenle sonuçlanır.

Bir örnek: Bu eşdeğerdir

$var1 = "Foo"; 
$var2 = $var1; // NORMAL assignment - $var1's value is copied into $var2 
$var3 = &$var1; // NOT normal copy! 

echo $var2; // Prints "Foo". 
echo $var3; // Also prints "Foo". 

$var1 = "Bar"; // Change $var1. 

echo $var2; // Prints "Foo" as before. 
echo $var3; // Now prints "Bar"! 
+0

wow, değişkeni klonlama. düzgün. bunu bilmiyordum. – DMin

+0

Teşekkür ederim, stephen. – lovespring

+0

"PHP $ var1 noktasını $ var1 yapar - bu, aynı şeyi gösteren iki değişkenle sonuçlandığınız anlamına gelir." kendinle çelişiyorsun; ve sadece ikinci kısım doğrudur. – Artefacto

1
global $a; 

: yeni referans $a atadığınızda

$a = &$GLOBALS['a']; 

, sen $a değil $GLOBALS['a'] değiştiriyoruz.

Aşağıda çıktı olarak ne bekliyorsunuz?

$GLOBALS['a']=1; 

function test() 
{ 
    $a='foobar';   // $a is a normal variable 
    $a=&$GLOBALS['a']; // same as: global $a; 
    $local=2; 
    $a=&$local; 
} 

test(); 

echo $a; 
+0

Teşekkür ederim, strager – lovespring

İlgili konular