Gönderimlerle İlgili Herşey
PHP Manual

Gönderim Ne Yapar?

Gönderimleri kullanıldığı üç temel işlem vardır: gönderimli atama, gönderimli aktarma, ve gönderimli döndürme. Bu bölümde bu işlemlerle ilgili bağlantılar verilerek bir başlangıç yapılmıştır.

Gönderimli atama

Bu ilk temel işlemde, iki değişkenin aynı içeriğe atıf yapmasına izin verilir. Örnek:

<?php
$a 
=& $b;
?>
Bunun anlamı, $a ve $b değişkenlerinin aynı içeriği gösterdiğidir.

Bilginize:

Burada $a ve $b tamamen eşittir; ne $a, $b'yi göstermekte ne de $b, $a'yı göstermektedir; $a ve $b aynı yeri göstermektedir.

Bilginize:

Eğer bir dizi gönderimle kopyalanmışsa gösterilen şey değerler değildir. Bu ayrıca işlevlere değerleriyle aktarılan diziler için de geçerlidir.

Bilginize:

Eğer tanımlanmamış bir değişken gönderimle atanır, aktarılır veya döndürülürse oluşturulmuş olur.

Örnek 1 - Gönderimlerin tanımlanmamış değişkenlerle kullanımı

<?php
function foo(&$var) { }

foo($a); // $a "oluşturulur" ve değer olarak null atanır

$b = array();
foo($b['b']);
var_dump(array_key_exists('b'$b)); // bool(true)

$c = new StdClass;
foo($c->d);
var_dump(property_exists($c'd')); // bool(true)
?>

Aynı sözdizimi, gönderim döndüren işlevler ve new işleci (PHP 4.0.4 ve sonrası, PHP 5.0.0'a kadar) ile kullanılabilir:

<?php
$foo 
=& dğşkn_bul($bar);
?>
PHP 5'ten beri, new özdevinimli olarak gönderim döndürmekte, bu bakımdan böyle bir bağlamda =& kullanımı önerilmemekte ve kullanıldığında E_STRICT seviyesinde ileti üretmektedir.

Uyarı

Bir işlevin içinde global olarak bildirilmiş bir değişkeni gönderimli olarak atarsanız gönderim sadece işlevin içinde görünür olur. $GLOBALS dizisini kullanarak bundan kaçınabilirsiniz.

Örnek 2 - İşlev içinde küresel değişkenlere gönderim

<?php
$var1 
"Örnek değişken";
$var2 "";

function 
küresel_gönderimler($küreselleri_kullan)
{
    global 
$var1$var2;
    if (!
$küreselleri_kullan) {
        
$var2 =& $var1// sadece işlev içinde görünürdür
    
} else {
        
$GLOBALS["var2"] =& $var1// küresel alanda da görünürdür
    
}
}

küresel_gönderimler(false);
echo 
"var2'ye '$var2' atanır\n"// var2'ye '' atanır
küresel_gönderimler(true);
echo 
"var2'ye '$var2' atanır\n"// var2'ye 'Örnek değişken' atanır
?>
global $var; deyimi $var =& $GLOBALS['var']; deyimine bir kısayol olarak düşünülür. Bu bakımdan $var'a başka bir gönderim atamak sadece yerel değişkenin gönderimini değiştirir.

Bilginize:

Eğer bir değişkene foreach döngüsü içinde gönderimle bir değer atarsanız gönderimde de değişiklik yapılmış olur.

Örnek 3 - foreach döngüsü içinde gönderim

<?php
$ref 
0;
$row =& $ref;
foreach (array(
123) as $row) {
    
// işlemler
}
echo 
$ref// 3 - yinelenen dizinin son elemanı
?>

Gönderimli aktarım

Gönderimlerle yapılan ikinci şey değişkenleri gönderimle aktarmaktır. Bir işlev içinde bir yerel değişken oluşturup çağrı etki alanında bir değişkenle aynı içeriğe gönderim yaparak bu gerçeklenebilir. Örnek:

<?php
function foo(&$var)
{
    
$var++;
}

$a=5;
foo($a);
echo 
$a// 6 çıktılar
?>
$a'nın 6 olmasının sebebi foo işlevinde $var değişkeninin $a'nın içeriğine gönderimli olmasıdır. Daha ayrıntılı açıklamayı gönderimle aktarım bölümünde bulabilirsiniz.

Gönderimli değer döndürme

Gönderimlerle yapılan üçüncü şey gönderimli değer döndürmedir.


Gönderimlerle İlgili Herşey
PHP Manual