v2.5.2
Giriş yap

Passing by Reference (&$) kullanım örnekleri?

obey00
318 defa görüntülendi

Dök. link: https://www.php.net/manual/en/language.references.pass.php

function (&$param1) { ..... } 

şeklinde kullanımlarla karşılaştım ancak bunu özellikle kullanım amacı nedir? Ne amaçla kullanılır tam olarak?

Cevap yaz
Cevaplar (2)
abdullahx
792 gün önce

Ben de daha evvel kullandığım iki şekli ile örnek vereyim, mantık aynı tabii de örnek çeşitliliği açısından.

Bir diziyi döngüye soktuğumuzda başka bir array daha oluşturmadan içindeki değerleri direkt olarak değiştirebilmek için foreach gibi döngülerde kullanabilirsin;

$array = ['item 1', 'item 2', 'item 3', 'item 4', 'item 5'];

foreach ($array as $index => &$item) {
    $item = "item $index";
}
print_r($array);

// Array
// (
//     [0] => item 0
//     [1] => item 1
//     [2] => item 2
//     [3] => item 3
//     [4] => item 4
// )

Ya da belki bazen recursive bir anonim fonkiyon yazmak istersin, fonksiyonun döndürdüğü değeri yine aynı fonksiyonda kullanmak istersin;

$func = function ($param) use (&$func) {
    $return = $param * 3;
    if ($return < 50)
        return $func($return);
    return $return;
};

echo $func(2);

// 54

Örnekler biraz garip olabilir ama aklıma ilk gelen şeyi yaptım :)

tayfunerbilen
792 gün önce

yani şöyle düşün, fonksiyonda parametre olarak geçtiğin elemanı değiştirmek istiyorsan ama onu geriye döndürmek yerine değerinin direk etkilenmesini istiyorsan kullanabilirsin, sonuçta fonksiyonun sadece onunla ilgili bir işlemi olmayabilir, ya da aldığın parametreye göre fonksiyon farklı bir işlem için değer döndürebilir ama alınan parametreninde bundan etkilenilmesi istenebilir.

kısaca referans aldığın değişkenin değerini etkiliyor bu şekilde kullanırsan, en basit örneği;

<?php

$text = 'hello';
function changeText(&$text) {
    $text .= ' world';
}
changeText($text);

echo $text; // hello world

başka bir örnek

<?php

$numbers = [2, 3, 5];
function multiply(&$nums) {
    $nums = array_reduce($nums, function($prev, $num) {
        $prev[] = $num * 2;
        return $prev;
    }, []);
}
multiply($numbers);

print_r($numbers);
/*
Array
(
    [0] => 4
    [1] => 6
    [2] => 10
)
 */

tabi bu olay sadece parametre geçmekle alakalı değil, örneğin şöyle kullanımlarıda var;

$text1 = 'hello';
$text2 = &$text1;

$text2 = 'deneme';
echo $text1;

$text2 oluşturulurken $text1 referansıyla oluşturuluyor, dolayısı ile $text2 değiştirince aslında referansı yani $text1 değişiyor. Bu tarz kullanımlara çok takılma, vakti gelirse zaten ihtiyacın olduğu bir noktada mutlaka kullanırsın :)