Overføring av objekter ved referanse i OOP i PHP
La oss si at vi har følgende klasse User:
<?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:
<?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:
<?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:
<?php
$user = new User('john', 30);
?>
La oss tilordne objektet til en annen variabel:
<?php
$test = $user;
?>
La oss endre egenskapen name
i variabelen $test
<?php
$test->name = 'eric';
?>
La oss sjekke at det delte objektet er endret.
La oss skrive ut egenskapen name
fra variabelen $user:
<?php
echo $user->name; // vil skrive ut 'eric'!
?>
Lag en klasse Product, der
følgende egenskaper finnes: name,
price.
Opprett et objekt av klassen Product, skriv
det til variabelen $product1.
Tilordne verdien av variabelen $product1
til variabelen $product2. Sjekk
at begge variablene refererer til ett
og samme objekt.