1 Mayıs 2011 Pazar

&Referanslari unset`leyip silmeyi unutma, PHP

$paths = array('a.htm', 'b.htm', 'c.htm', 'd.htm', 'e.thm');
$dir = 'base';
 
// Path`ları standarlaştırırsan
foreach($paths as &$path)
   $path = $dir.'/'.$path;
// unset($path); <- Çözüm budur. Problem ise aşağıda.
 
// Sonra da $path`a değer atamaya kalkarsan
foreach($paths as $path) // mesela, yine foreach
echo $path.', '; 
// Kederli sonuçlar ortaya çıkar.
// base/a.htm, base/b.htm, base/c.htm, base/d.htm, base/d.htm,
// iki kez d.htm çıkmış olur. : (
&

Sorun orda ki, PHP`de foreach`de tanımlanan iterasyon değişkeni ($path) değerini foreach`in dışında da saklıyor.
Dolayısıyla, yukarıdakı foreach son döngüsünde $path`a $paths`ın sonuncusuna referans atadığından, aşağıdakı foreach $path`a her değer atadığında $paths`ın sonuncusunu değiştirmiş oluyor.

Hiç yorum yok:

Yorum Gönder