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: Bağımsız değişken 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.

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.

To Top