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:
Bir işlevden döndürerek bir gönderim. Örnek:
<?php
function foo(&$var)
{
$var++;
}
function &bar()
{
$a = 5;
return $a;
}
foo(bar());
?>
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.
?>