Başvuru PHP dosyalarda grup Pass: Eleman Çoğaltarak Son? (Hata?)
Ben sadece yazıyordum basit bir php komut dosyası ile bazı çok garip davranışları vardı. Minimum hata yeniden oluşturmak için gerekli için çalışır.
<?php
$arr = array("foo",
"bar",
"baz");
foreach ($arr as &$item) { /* do nothing by reference */ }
print_r($arr);
foreach ($arr as $item) { /* do nothing by value */ }
print_r($arr); // $arr has changed....why?
?>
Bu çıkışları:
Array
(
[0] => foo
[1] => bar
[2] => baz
)
Array
(
[0] => foo
[1] => bar
[2] => bar
)
Bu bir hata ya da olması gereken bu gerçekten garip bir davranış mı?
CEVAP
İlk foreach döngü sonra, $item
yine de $arr[2]
tarafından kullanılan bir değer bir başvuru. Başvuru çağırmaz ikinci döngü içinde her dosyalarda grup çağrı,, bu değer, ve böylece yeni değeri ile $arr[2]
, değiştirir.
1, değer ve $arr[2]
$arr[0]
, hale döngü ''. foo
2 $arr[2]
değeri döngü haline olan $arr[1]
,''. bar
3 $arr[2]
değeri döngü haline olan $arr[2]
, '(çünkü döngü 2)'. bar
Değeri 'baz' aslında ikinci dosyalarda grup çağrısı kaybetti döngü.
Çıkış hata ayıklama
Döngünün her yineleme için, $item
değeri, yinelemeli dizi baskı $arr
gibi yankı ederiz.
İlk döngü çalıştırdığınızda, bu çıkışını görüyoruz:
foo
Array ( [0] => foo [1] => bar [2] => baz )
bar
Array ( [0] => foo [1] => bar [2] => baz )
baz
Array ( [0] => foo [1] => bar [2] => baz )
Döngünün sonunda, $item
$arr[2]
aynı yeri işaret ediyor.
İkinci döngü çalıştırdığınızda, bu çıkışını görüyoruz:
foo
Array ( [0] => foo [1] => bar [2] => foo )
bar
Array ( [0] => foo [1] => bar [2] => bar )
bar
Array ( [0] => foo [1] => bar [2] => bar )
Her zaman dizi $item
, ona yeni bir değer koymak nasıl da her ikisi de hala aynı konuma işaret oldukları için, aynı değer $arr[3]
güncelleme, fark edeceksiniz. Döngü dizisinin üçüncü değer için geldiğinde, biz de bu döngünün bir önceki yineleme tarafından ayarlanmış olduğu için değer bar
içerir.
Bir hata mı?
Hayır. Bu başvurulan bir maddenin davranışı, ve bir hata var. Bir şey gibi çalışan benzer olacaktır:
for ($i = 0; $i < count($arr); $i ) { $item = $arr[$i]; }
Bir foreach döngü başvurulan öğeleri göz ardı edebilirsiniz doğada özel değil. Sadece bir döngü dışında senin gibi yeni değeri her zaman için değişken ayar.
PHP dosyalarda grup olarak başvuru Pas...
.Döngü daha hızlı çalışır NET,' v...
Git bir dosyalarda grup var mı?...
Nedir [].dosyalarda grup.() çağrısı Ja...
Neden Listesi<T>.Dosyalarda grup...