Överföring av objekt genom referens i OOP i PHP
Låt oss säga att vi har följande klass User:
<?php
class User
{
public $name;
public $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Låt oss säga att vi skapar ett objekt av denna klass:
<?php
$user = new User('john', 30);
?>
Föreställ dig nu följande situation: du
vill tilldela värdet av variabeln $user
till en annan variabel, till exempel
$test.
Om det inte handlade om objekt, utan om primitiva typer,
dvs strängar, nummer, arrayer etc.,
skulle en kopia av värdet
av variabeln $user hamna i variabeln $test.
Det betyder att ändringar i någon av variablerna herefter inte skulle ändra värdet på den andra variabeln. Låt oss titta på ett exempel:
<?php
$user = 1;
$test = $user; // i variabeln $test finns nu 1
$test = 2; // i variabeln $test finns nu 2, men i $user finns fortfarande 1
?>
Med objekt är det annorlunda - när de tilldelas till en annan variabel kopieras inte objekten, utan överförs genom referens: det betyder att båda dessa variabler har samma objekt som värde. Detta har en viktig konsekvens: om några egenskaper i objektet ändras med hjälp av en variabel, kommer samma ändringar att dyka upp i den andra variabeln.
Låt oss se det i praktiken. Skapa ett användarobjekt:
<?php
$user = new User('john', 30);
?>
Tilldela objektet till en annan variabel:
<?php
$test = $user;
?>
Låt oss ändra egenskapen name
i variabeln $test
<?php
$test->name = 'eric';
?>
Låt oss kontrollera att det delade objektet har ändrats.
Låt oss skriva ut egenskapen name
från variabeln $user:
<?php
echo $user->name; // skriver ut 'eric'!
?>
Skapa en klass Product, där
följande egenskaper finns: name,
price.
Skapa ett objekt av klassen Product, skriv
det till variabeln $product1.
Tilldela värdet av variabeln $product1
till variabeln $product2. Kontrollera
att båda variablerna refererar till ett
och samma objekt.