PHP'de OOP'de Nesnelerin Referans ile Aktarımı
Diyelim ki User adında bir sınıfımız var:
<?php
class User
{
public $name;
public $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Diyelim ki bu sınıfın bir nesnesini oluşturuyoruz:
<?php
$user = new User('john', 30);
?>
Şimdi şu durumu hayal edin: $user değişkeninin
değerini başka bir değişkene, örneğin $test'e
atamak istiyorsunuz.
Eğer konu nesneler değil de, primitive tipler
yani dizeler, sayılar, diziler vb. olsaydı,
$test değişkenine $user değişkeninin
değerinin bir kopyası giderdi.
Bu, ileride değişkenlerden herhangi birinde yapılan değişikliklerin diğer değişkenin değerini değiştirmeyeceği anlamına gelir. Bir örnekle görelim:
<?php
$user = 1;
$test = $user; // $test değişkeninde artık 1 var
$test = 2; // $test değişkeninde artık 2 var, $user'da ise hala 1
?>
Nesnelerde durum farklıdır - başka bir değişkene yazıldığında nesneler kopyalanmaz, referans ile aktarılır: bu, her iki değişkenin de aynı nesneyi değer olarak tuttuğu anlamına gelir. Bunun önemli bir sonucu vardır: eğer bir değişkeni kullanarak nesnenin bazı özellikleri değiştirilirse, ikinci değişkende de bu değişiklikler görünecektir.
Pratikte görelim. Bir kullanıcı nesnesi oluşturalım:
<?php
$user = new User('john', 30);
?>
Nesneyi başka bir değişkene atayalım:
<?php
$test = $user;
?>
$test değişkenindeki
name özelliğini değiştirelim
<?php
$test->name = 'eric';
?>
Ortak nesnenin değiştiğini kontrol edelim.
$user değişkenindeki
name özelliğini yazdıralım:
<?php
echo $user->name; // 'eric' yazdıracak!
?>
Product sınıfını yapın, içinde
şu özellikler olsun: name,
price.
Product sınıfının bir nesnesini oluşturun,
onu $product1 değişkenine yazın.
$product1 değişkeninin değerini
$product2 değişkenine atayın. Her iki
değişkenin de aynı nesneye referans gösterdiğini
kontrol edin.