2012-01-07 43 views

cevap

8

Bu, değer yerine referans ile geçirildiği anlamına gelir ... IE değişkenin herhangi bir manipülasyonu orijinali etkileyecektir. Bu, herhangi bir değişikliğin orijinal nesneyi etkilemediği yere göre değişir.

Bu, stackoverflow'ta birçok kez sorulur.

+1

"referans olarak", eklemek için anlamı o değişken için aynı ayrılan bellek bloğu bahsediyordur olarak – Prof83

+1

ifade ediliyor: Sana foreach PHP Manual page bir okuma öneriyorum

, hepsi dört taleplerini içerir Değişkenin bir kopyasının yeni bir bellek bloğunda PHP tarafından yaratıldığı anlamına gelen "değer ile" tersine. – Kaii

+0

Referansın örnek kodda nasıl iletileceğinin iki yolu vardır, [her ikisini de özetledim] (http://stackoverflow.com/a/8769347/367456). – hakre

4

ana diziye dizinin tek örneği değişiklikleri uygulamak için kullanılır ..

gibi:

// Şimdi değişiklikler alışkanlık etkileyen dizi $ wishesarray

foreach ($wishesarray as $id => $categoriy) { 
     $categoriy++; 
} 
print_r($wishesarray); //It'll same as before.. 

Ama Şimdi değiştirir dizi $ wishesarray içinde yansıtacaktır da

foreach ($wishesarray as $id => &$categoriy) { 
     $categoriy++; 
} 
print_r($wishesarray); //It'll have values all increased by one.. 
36

Bu örnek size gösterecektir Burada bunun için PHP dokümanlar fark

$array = array(1, 2); 
foreach ($array as $value) { 
    $value++; 
} 
print_r($array); // 1, 2 because we iterated over copy of value 

foreach ($array as &$value) { 
    $value++; 
} 
print_r($array); // 2, 3 because we iterated over references to actual values of array 

atın: sorunuzu kodu için http://pl.php.net/manual/en/control-structures.foreach.php

+0

_by reference_ sözdizimi sık sık aşağıdaki gibi hatalara neden olmaz: "Dize ofsetlerinden/dizisinden referanslar oluşturulamıyor"? –

1

, iç foreach döngüsü boş olduğu için verilen özel bir cevabı olabilir.

Kodunuzda gördüğüm şey, iç foreach'un ortak yol yerine bir başvurunun üzerinde yinelenmesidir.

foreach($standard as $each); 

foreach($standard as &$each); # this is used in your question 

$reference = &$standard; 
foreach($reference as $each); 

$reference = &$standard; 
foreach($reference as &$each); # this is used in your question 
İlgili konular