Overførsel af objekter som reference i OOP i PHP
Lad os sige, 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;
}
}
?>
Lad os sige, at vi opretter et objekt af denne klasse:
<?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:
<?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:
<?php
$user = new User('john', 30);
?>
Lad os tildele objektet til en anden variabel:
<?php
$test = $user;
?>
Lad os ændre egenskaben name
i variablen $test
<?php
$test->name = 'eric';
?>
Lad os kontrollere, at det fælles objekt er ændret.
Lad os udskrive egenskaben name
fra variablen $user:
<?php
echo $user->name; // vil udskrive 'eric'!
?>
Opret klassen Product, hvor
der vil være følgende egenskaber: name,
price.
Opret et objekt af klassen Product, gem
det i variablen $product1.
Tildel værdien af variablen $product1
til variablen $product2. Kontroller,
at begge variabler refererer til det samme
objekt.