Gönderimle Döndürme

Gönderimle döndürme, gönderimin bağlayacağı değişkeni hedefleyen bir işlev kullanmak istediğiniz takdirde yararlıdır. Gönderimle döndürmeyi başarımı arttırmak amacıyla kullanmayın. Motor, bunu kendine göre en iyileyecek yeteneğe sahiptir. Sadece geçerli bir teknik sebebiniz olduğunda gönderimle döndürme yapın! Gönderimle döndürmek için şu söz dizimi kullanılır:

<?php
class sınıf {
    public 
$değer 42;

    public function &
değeriBağla() {
        return 
$this->değer;
    }
}

$obj = new sınıf;
$değerim = &$obj->değeriBağla(); // $değerim, $obj->değer için bir gönderimdir
echo $değerim;                   // 42 basar
$obj->değer 2;
echo 
$değerim;                   // 2 basar
?>
Bu örnekte, değeriBağla işlevi ile döndürülen nesne özelliği değişkene atanmaktadır, eğer gönderim söz dizimi kullanılmamış olsaydı özelliğin kendisi değil bir kopyası atanmış olacaktı.

Bilginize: Değiştirge aktarmanın tersine, burada her iki taraftada (çağıran ve çağrılan) & kullanımı zorunludur. Çağıran tarafta $değerim değişkenine yapılanın bir atama değil gönderim bağlantısı olduğunu, çağrılan tarafta ise yapılanın sıradan bir değer kopyalama değil bir gönderimle döndürme olduğunu belirtmektedir.

Bilginize: return ($this->değer); söz dizimi ile bir işlevden bir gönderim döndürmek isterseniz bir değişkeni değil de bir ifadenin sonucunu döndürmeye çalışmış olacağınızdan bu istediğinizi yapmayacaktır. Bir işlevden gönderimle sadece değişkenleri döndürebilirsiniz, başka bir şey döndüremezsiniz. PHP 5.1.0'dan beri gönderimle döndürme söz dizimini kullanan bir işlevden bir devingen ifadenin veya bir new işlecinin sonucunu döndürmeye çalışmak E_NOTICE seviyesinden bir hata oluşturmaktadır.

Dönen gönderim kullanmak için, gönderim ataması yapmanız gerekir:

<?php
function &collector() {
  static 
$collection = array();
  return 
$collection;
}
$collection = &collector();
$collection[] = 'foo';
?>
Dönen gönderimi bir gönderim umarak başka bir işleve aktarmak için bu sözdizimini kullanabilirsiniz:
<?php
function &collector() {
  static 
$collection = array();
  return 
$collection;
}
array_push(collector(), 'foo');
?>

Bilginize: array_push(&collector(), 'foo'); ifadesinin çalışMAyacağına, ölümcül hatayla sonuçlanacağına dikkat edin.