Pass by Reference Objek dalam OOP di PHP

Misalkan kita diberikan kelas User berikut:

User.php<?php
  class User
  {
    public $name;
    public $age;
    
    public function __construct($name, $age)
    {
      $this->name = $name;
      $this->age  = $age;
    }
  }
?>

Misalkan kita membuat objek dari kelas ini:

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

Sekarang bayangkan situasi berikut: Anda ingin menetapkan nilai variabel $user ke variabel lain, misalnya $test.

Jika yang dibicarakan bukan objek, melainkan primitif, yaitu string, angka, array, dll, maka salinan nilai variabel $user akan masuk ke dalam variabel $test.

Ini berarti bahwa perubahan pada salah satu variabel selanjutnya tidak akan mengubah nilai variabel lainnya. Mari kita lihat contohnya:

index.php<?php
  $user = 1;
  
  $test = $user; // variabel $test sekarang berisi 1
  $test = 2;     // variabel $test sekarang berisi 2, sedangkan $user masih 1
?>

Halnya berbeda dengan objek - saat ditulis ke dalam variabel lain, objek tidak disalin, melainkan diteruskan secara referensi (by reference): ini berarti kedua variabel tersebut memiliki nilai yang sama, yaitu satu objek yang sama. Ini memiliki konsekuensi penting: jika Anda mengubah properti tertentu dari objek menggunakan satu variabel, perubahan yang sama akan muncul di variabel kedua.

Mari kita lihat dalam praktik. Buatlah objek user:

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

Tetapkan objek ke variabel lain:

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

Ubah properti name pada variabel $test

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

Mari kita periksa bahwa objek yang sama telah berubah. Tampilkan properti name dari variabel $user:

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

Buatlah kelas Product, yang di dalamnya terdapat properti berikut: name, price.

Задание 2

Buat objek dari kelas Product, tulis ke dalam variabel $product1.

Задание 3

Tetapkan nilai variabel $product1 ke variabel $product2. Periksa bahwa kedua variabel merujuk pada satu objek yang sama.