Gönderimle Aktarım

Bir değişkeni bir işleve gönderimle aktarabilirsiniz, böylece işlevin değiştirgelerini değiştirebilirsiniz. Sözdizimi şöyledir:

<?php
function işlev(&$değişken)
{
    
$değişken++;
}

$a=5;
foo($a);
// Burada $a artık 6'dır
?>

Bilginize: İşlevin çağrıldığı yerde gönderim yapıldığına dair bir belirtinin olmadığına dikkat ediniz; gönderim sadece işlevin üzerindedir. İşlev tanımı değiştirgeyi gönderimle gerektiği gibi aktarmak için tek başına yeterlidir. & imini işlev(&$a); biçeminde kullandığınız takdirde "Çağrı sırasında gönderimle aktarım" anlamına gelen uyarıyı PHP 5.3.0 ve sonrasında almazsınız. 5.4.0 sonrasında bu uyarı kaldırıldığından böyle bir kullanım ölümcül hata ile sonuçlanır.

Aşağıdakiler bir işleve gönderimle aktarılabilir:

  • işlev($a) şeklinde bir değişken.
  • Bir işlevden döndürerek bir gönderim. Örnek:

    <?php
    function foo(&$var)
    {
        
    $var++;
    }
    function &
    bar()
    {
        
    $a 5;
        return 
    $a;
    }
    foo(bar());
    ?>
    Ayrıca, gönderimle değer döndürme konusuna da bakınız.

Sonuç tanımsız olacağından, başka hiçbir ifade gönderimle aktarılamaz. Örneğin, aşağıdaki gönderimle aktarım örneği geçersizdir:

<?php
function foo(&$var)
{
    
$var++;
}
function 
bar() // Dikkat, & yok
{
    
$a 5;
    return 
$a;
}
foo(bar()); // PHP 5.0.5'ten beri ölümcül hata üretmekte
            // 5.1.1 den beri katı standartlar uyarısı, 7.0.0 dan beri uyarı

foo($a 5); // Bir ifade, değişken değil
foo(5);      // Ölümcül hata üretir

class Foobar
{
}

foo(new Foobar()) // PHP 7.0.7'dan beri bir uyarı üretmekte
                  // Uyarı: Sadece değişkenler gönderime göre aktarılmalıdır.
?>