Reference Operator ile PHP'de bir fonksiyondan birden fazla değer gönderebilme



2 dakikalık okuma
April 26, 2020

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: