PHP'de OOP'de Nesnelerin Referans ile Aktarımı

Diyelim ki User adında bir sınıfımız var:

User.php<?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:

index.php<?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:

index.php<?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:

index.php<?php
  $user = new User('john', 30);
?>

Nesneyi başka bir değişkene atayalım:

index.php<?php
  $test = $user;
?>

$test değişkenindeki name özelliğini değiştirelim

index.php<?php
  $test->name = 'eric';
?>

Ortak nesnenin değiştiğini kontrol edelim. $user değişkenindeki name özelliğini yazdıralım:

index.php<?php
  echo $user->name; // 'eric' yazdıracak!
?>
Задание 1

Product sınıfını yapın, içinde şu özellikler olsun: name, price.

Задание 2

Product sınıfının bir nesnesini oluşturun, onu $product1 değişkenine yazın.

Задание 3

$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.