Referans geçirme yöntemi C deki pointerlara benzer şekilde çalışır.
$a = 1;
$b = &$a;
echo $a;
$b = 2;
echo $a;
Yukarıdaki kodda $b değişkeni, $a nın işaretçisi olarak çalışır. Yani $a değişkeninin bellekte tutulduğu yeri $a ile birlikte $b değişkeni de gösterir.
Bu yüzden $b ye bir değer atadığınızda $a nın da içeriği değişir. Böylece ikinci echo nun sonucunda ekrana 2 basılır.
Gerçek bir örnekle göstermek gerekirse, daha önceden yazmış olduğunuz ve program içerisinde birçok yerde kullandığınız bir fonksiyonunuz olduğunu düşünelim.
function buyuk_mu($x,$y) {
if ($x > $y) {
return true;
} else {
return false;
}
}
Fark ettiğiniz gibi fonksiyonumuz ilk parametrenin ikinci parametreden büyük olması durumunda true diğer durumlarda false sonucu gönderir. Fonksiyonu kullandığınız birçok yerde dönüş değerinin true yada false olduğunu kontrol ediyor olabilirsiniz. İki değişkenin eşit olması durumunda ise yine false dönecektir. Ama sonradan false olduğu durumlarda aynı zamanda eşit olup olmadığını bilmek istediğiniz bir yer oldu. Böyle bir durumda fonksiyonun kullanıldığı heryeri değiştirmek yerine şöyle bir değişiklik yapabiliriz.
Fonksiyon tanımlamasındaki & karakterine dikkat.
function buyuk_mu($x,$y, &$esit=false) {
if ($x > $y) {
return true;
} else {
if ($x == $y) $esit=true;
return false;
}
}
Kullanımında ise;
$esit = false;
if (buyuk_mu(10,10,$esit)) {
echo 'x büyük';
} else {
if ($esit) {
echo 'Sayılar Eşit';
} else {
echo 'y büyük';
}
}