Normalde PHP dilinde bir fonksiyon, geriye tek bir değer gönderir; fakat farklı teknikler kullanarak birden fazla değer de göndertebiliriz. Bu tekniklere geçmeden önce PHP’de tek bir değer gönderiminin şu şekilde yapıldığını bilmemize rağmen tekrardan gösterelim:
function hesapla($x, $y)
{
$result = $x + $y;
return $result;
}
Şimdi bir diğer teknik olan dizileri kullanarak da birden fazla değeri de tek bir değişken içinde yollattırabiliriz; ama yazımın konusunda vurguladığım yöntem bu değil tabi ki :-). Şu şekilde:
function hesapla($x,$y)
{
$result = [];
$toplama = $x + $y;
$cikarma = $x - $y;
$carpma = $x * $y;
$bolme = $x / $y;
$result = [
'toplama' => $toplama,
'cikarma' => $cikarma,
'carpma' => $carpma,
'bolme' => $bolme,
];
return $result;
}
$sonuc = hesapla(3, 2);
echo $sonuc['toplama'];
echo $sonuc['cikarma'];
Peki yazı başlığımda vurguladığım yönteme geçecek olursak, PHP’de bulunan reference operator “&” ler ile fonksiyon parametresi olarak da yollatırabileceğimizi göstermek istiyorum.
Bilindiği gibi PHP dilinde equals “=” operatör kullandığımızda, operatörün solunda bulunan değişkene sağındaki kopyalanıyordu. Şöyle:
$b = 2;
$a = $b;
Yukarıda $a’ya $b değeri eşit dediğimiz anda kopyalanıyor.
Şimdi bu durumda ben “reference operand (&)” kullanırsam kopyalama değil, o değişkenin hafızadaki referans değerini kopyalarım. Pointer gibi düşünebilirsiniz.
Bu durumda
$b = 2;
$a =& $b;
dersem $b değişkeni kod içinde herhangi bir yerde değiştiğinde $a’da değişmiş olacak. Çünkü $a değişkeni $b‘nin hafızadaki referans değerini tutuyor. Aynı object oriented programlamada nesnelerin davranışı gibi.
Örnek yapalım:
$b = 2;
$a =& $b;
echo $a; // ekrana 2 yazar
$b = 3;
echo $a; // ekrana 3 yazar
Bu mantıkla bir fonksiyona birden fazla değer şöyle yollattırabiliriz:
function hesapla($x, $y, &$toplama, &$cikarma, &$carpma)
{
$toplama = $x + $y;
$cikarma = $x - $y;
$carpma = $x * $y;
}
Kullanımı:
hesapla(3, 2, $toplama_degeri, $cikarma_degeri, $carpma_degeri);
echo $toplama_degeri; // cikti 5
echo $cikarma_degeri; // cikti 1
echo $carpma_degeri; // cikti 6
Etiketler: