Overdracht van objecten door referentie in OOP in PHP

Stel dat we de volgende klasse User hebben:

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

Stel dat we een object van deze klasse aanmaken:

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

Stel je nu de volgende situatie voor: je wilt de waarde van variabele $user toewijzen aan een andere variabele, bijvoorbeeld $test.

Als het niet om objecten ging, maar om primitieven, dus om strings, getallen, arrays, enz., dan zou in variabele $test een kopie van de waarde van variabele $user komen.

Dit betekent dat veranderingen in een van de variabelen in de toekomst de waarde van de andere variabele niet zouden wijzigen. Laten we kijken naar een voorbeeld:

index.php<?php
  $user = 1;
  
  $test = $user; // in variabele $test zit nu 1
  $test = 2;     // in variabele $test zit nu 2, en in $user - nog steeds 1
?>

Met objecten is het anders - bij toewijzing aan een andere variabele worden objecten niet gekopieerd, maar overgedragen door referentie: dit betekent dat beide variabelen als waarde hetzelfde object hebben. Dit heeft een belangrijke consequentie: als je eigenschappen van het object wijzigt met behulp van de ene variabele, verschijnen deze wijzigingen ook in de tweede variabele.

Laten we dit in de praktijk bekijken. Laten we een object met een gebruiker aanmaken:

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

Laten we het object toewijzen aan een andere variabele:

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

Laten we de eigenschap name wijzigen in variabele $test

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

Laten we controleren of het gedeelde object is gewijzigd. Laten we de eigenschap name uitvoeren vanuit variabele $user:

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

Maak een klasse Product, waarin de volgende eigenschappen zitten: name, price.

Задание 2

Maak een object van de klasse Product, schrijf het in variabele $product1.

Задание 3

Wijs de waarde van variabele $product1 toe aan variabele $product2. Controleer dat beide variabelen verwijzen naar hetzelfde object.