Nesneler ve Gönderimler

PHP 5 için nesne yönelimli programlama ile ilgili olarak "öntanımlı olarak nesneler gönderimli aktarılır" diye bir kanı oluşmuştur, fakat bu tamamen doğru değildir. Bu bölümde bir örnek üzerinden bu genel kanı düzeltilmeye çalışılmıştır.

Bir PHP gönderimi, aynı değeri iki farklı değişkene yazmayı mümkün kılan bir takma addır. PHP 5'ten itibaren bir nesne değişkeni artık değer olarak nesnenin kendisini içermemektedir. Bunun yerine, nesne erişimcilerin asıl nesneyi bulmasını sağlayacak bir nesne tanıtıcısı içerir. Bir nesne değiştirgesi ile aktarılırken, döndürülürken veya başka bir değişkene atanırken bunlar takma ad değil, farklı değişkenlerdir: Aynı nesneyi gösteren tanıtıcının birer kopyasını içerirler.

Örnek 1 - Gönderimler ve Nesneler

<?php
class {
    public 
$foo 1;
}

$a = new A;
$b $a;     // $a ve $b aynı nesne tanıtıcısının kopyalarını içerir
             // ($a) = ($b) = <tanıtıcı>
$b->foo 2;
echo 
$a->foo."\n";


$c = new A;
$d = &$c;    // $c ve $d gönderimdir
             // ($c,$d) = <tanıtıcı>

$d->foo 2;
echo 
$c->foo."\n";


$e = new A;

function 
foo($obj) {
    
// ($obj) = ($e) = <tanıtıcı>
    
$obj->foo 2;
}

foo($e);
echo 
$e->foo."\n";

?>

Yukarıdaki örneğin çıktısı:

2
2
2