Overførsel af objekter som reference i OOP i PHP

Lad os sige, at vi har følgende klasse User:

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

Lad os sige, at vi opretter et objekt af denne klasse:

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

Forestil dig nu følgende situation: du ønsker at tildele værdien af variablen $user til en anden variabel, for eksempel $test.

Hvis det ikke handlede om objekter, men om primitiver, det vil sige strenge, tal, arrays osv., ville variablen $test modtage en kopi af værdien af variablen $user.

Det betyder, at ændringer i en af variablerne herefter ikke ville ændre værdien af den anden variabel. Lad os se på et eksempel:

index.php<?php
  $user = 1;
  
  $test = $user; // variablen $test har nu 1
  $test = 2;     // variablen $test har nu 2, mens $user stadig har 1
?>

Med objekter er det anderledes - når de tildeles til en anden variabel, kopieres objekter ikke, men overføres som reference: det betyder, at begge disse variabler har værdien af det samme objekt. Dette har en vigtig konsekvens: hvis du ændrer nogle egenskaber ved objektet med en variabel, vil de samme ændringer vises i den anden variabel.

Lad os se på det i praksis. Lad os oprette et objekt med en bruger:

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

Lad os tildele objektet til en anden variabel:

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

Lad os ændre egenskaben name i variablen $test

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

Lad os kontrollere, at det fælles objekt er ændret. Lad os udskrive egenskaben name fra variablen $user:

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

Opret klassen Product, hvor der vil være følgende egenskaber: name, price.

Задание 2

Opret et objekt af klassen Product, gem det i variablen $product1.

Задание 3

Tildel værdien af variablen $product1 til variablen $product2. Kontroller, at begge variabler refererer til det samme objekt.