Overføring av objekter ved referanse i OOP i PHP

La oss si 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;
    }
  }
?>

La oss si at vi oppretter et objekt av denne klassen:

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

Tenk deg nå følgende situasjon: du vil tilordne verdien av variabelen $user til en annen variabel, for eksempel $test.

Hvis det ikke handlet om objekter, men om primitiver, det vil si strenger, tall, arrays og lignende, ville variabelen $test fått en kopi av verdien til variabelen $user.

Det betyr at endringer i en av variablene heretter ikke ville endret verdien til den andre variabelen. La oss se på et eksempel:

index.php<?php
  $user = 1;
  
  $test = $user; // i variabelen $test er det nå 1
  $test = 2;     // i variabelen $test er det nå 2, mens i $user er det fortsatt 1
?>

Med objekter er det annerledes - når de tilordnes til en annen variabel, kopieres ikke objektene, men overføres ved referanse: det betyr at begge disse variablene har samme objekt som verdi. Dette har en viktig konsekvens: hvis du endrer noen egenskaper ved objektet med bruk av en variabel, vil de samme endringene vises i den andre variabelen.

La oss se på det i praksis. La oss opprette et brukerobjekt:

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

La oss tilordne objektet til en annen variabel:

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

La oss endre egenskapen name i variabelen $test

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

La oss sjekke at det delte objektet er endret. La oss skrive ut egenskapen name fra variabelen $user:

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

Lag en klasse Product, der følgende egenskaper finnes: name, price.

Задание 2

Opprett et objekt av klassen Product, skriv det til variabelen $product1.

Задание 3

Tilordne verdien av variabelen $product1 til variabelen $product2. Sjekk at begge variablene refererer til ett og samme objekt.