Penghantaran Objek melalui Rujukan dalam OOP dalam PHP

Katakan kita diberikan kelas User seperti berikut:

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

Katakan kita mencipta objek kelas ini:

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

Sekarang bayangkan situasi berikut: anda ingin menetapkan nilai pembolehubah $user kepada pembolehubah lain, contohnya $test.

Jika ini bukan mengenai objek, tetapi mengenai primitif, iaitu rentetan, nombor, tatasusunan dan sebagainya, maka salinan nilai pembolehubah $user akan masuk ke dalam pembolehubah $test.

Ini bermakna perubahan mana-mana pembolehubah kelak tidak akan mengubah nilai pembolehubah yang satu lagi. Mari lihat contoh:

index.php<?php
  $user = 1;
  
  $test = $user; // dalam pembolehubah $test sekarang ialah 1
  $test = 2;     // dalam pembolehubah $test sekarang ialah 2, manakala dalam $user masih 1
?>

Dengan objek, ia berbeza - apabila ditulis ke dalam pembolehubah lain, objek tidak disalin, sebaliknya dihantar melalui rujukan: ini bermakna, kedua-dua pembolehubah ini mempunyai nilai objek yang sama. Ini mempunyai implikasi penting: jika anda menukar sebarang sifat objek menggunakan satu pembolehubah, perubahan yang sama akan muncul dalam pembolehubah kedua.

Mari kita lihat secara praktikal. Cipta objek dengan pengguna:

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

Tetapkan objek kepada pembolehubah lain:

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

Tukar sifat name dalam pembolehubah $test

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

Mari kita semak sama ada objek bersama telah berubah. Paparkan sifat name dari pembolehubah $user:

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

Buat kelas Product, di mana terdapat sifat berikut: name, price.

Задание 2

Cipta objek kelas Product, tulis ia ke dalam pembolehubah $product1.

Задание 3

Tetapkan nilai pembolehubah $product1 kepada pembolehubah $product2. Semak bahawa kedua-dua pembolehubah merujuk kepada satu objek yang sama.